细数php语法里的那些“坑”

尽管PHP的语法已经很松散,写起来很“爽”。但是对于像“我们”这种学过 Java、 C#的“完全面向对象程序员”来说,PHP程序设计语言里,还是有一些的坑的。下面请让我来盘点一下。

Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in......

  错误原因:在PHP语法中,声明任何函数,函数名的前面需要 function 关键字。

<?php
//错误代码如下
class Test{
  __construct(){
    echo ‘I am construction!‘;
  }
}

  正确示例:每一次声明函数(方法),都要写上“function”这个关键字。无论您想声明的是 __construct()这类魔术方法,还是自定义函数,都逃不出 function 的手掌心。

<?php
class Test{
  //正确代码如下
    function __construct(){
        echo ‘I am construction!‘;
    }
}

Fatal error: Access to undeclared static property: ......

  错误原因:self::只能指向静态属性,而指向非静态属性只能用 $this->。

<?php
//错误代码
class Person{
    function __construct($name){
        self::$name = $name;
    }
    private $name;
}

$paul = new Person(‘paul‘);

  正确方法:self::指向静态属性,$this->指向非静态属性。

<?php
//正确代码 $this
class Person{
    function __construct($name){
        $this->$name = $name;
    }
    private $name;
}

$paul = new Person(‘paul‘);
<?php
//正确代码 self::
class Person{
    function setBirthday($date){
        self::$birthday = $date;
    }
    static private $birthday;
}

$paul = new Person();
$paul->setBirthday(‘1990-01-01‘);

Fatal error: Cannot redeclare A::__construct() in......

  错误原因:PHP不支持函数重载

  解决方法:使用PHP内置函数 func_num_args() 、func_get_arg() 、func_get_args()来模拟实现OOP的函数重载

<?php
class Test{
    function __construct(){
        switch(func_num_args()){
            case 0:
                echo ‘no argument‘;
            default:
                echo ‘the number of arguments is ‘.func_num_args(). ‘<br />‘;
                $argumentArray = func_get_args();
                //遍历方法一
                foreach($argumentArray as $key => $value){
                    echo ‘the No‘. $key. ‘ argument is ‘. $value. ‘<br />‘;
                }
                echo ‘<br />‘;
                //遍历方法二
                for($i=0; $i<func_num_args(); $i++){
                    echo ‘the No‘. $i. ‘ argument is ‘. func_get_arg($i). ‘<br />‘;
                }
        }
        echo ‘<hr />‘;
    }
}

new Test();
new Test(1);
new Test(1,2,3);

自动初始化对象

细数php语法里的那些“坑”

时间: 2024-11-08 04:47:11

细数php语法里的那些“坑”的相关文章

【百度小程序】细数百度小程序踩的坑

最近接触百度小程序挺多,开发了几个产品,都快被百度的小程序折磨死.真的是不想吐槽了,接下来我就讲讲我遇到的坑与一些经验. 1. s-for 这个for循环的写法为 s-for='arr' 或者 s-for = 'item,index in arr' .这些到没什么,主要是s-for不能循环常数...这让我从微信小程序转到百度小程序不太习惯...官方回应说什么底层diff差异哦,后面会修复.不知道现在修复好没. 2. 自定义组件之命名与路径 引用组件的时候,在json文件中,usingCompon

细数空格缩进在开发中的坑

没错,这是一篇火药文.网上流传的各种编程规范几乎青一色都是说用空格代替Tab,其理由几乎都是“这是唯一能保证在所有环境下获得一致展现的方法”. 那我想问一句,你们到底能要多少种环境要看代码??? 1.用Windows自带的记事本?那我只能说,你继续装,看你什么时候才能完成得了任务.2.连接到Linux服务器上使用VI或者VIM?我也只能说只有改服务器的配置文件的时候才会这样做吧,而且如果是配置文件比较复杂也是下载下来用Notepad++改清晰很多好伐,比如Aapche的配置文件在Notepad+

【转帖】鸿蒙发布,老兵戴辉为你细数一部华为操作系统28年史

鸿蒙发布,老兵戴辉为你细数一部华为操作系统28年史 https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=725007 爱集微·08-10 12:31·数码 来源: 上观新闻 一部华为发展史,也是一部可歌可泣的操作系统发展史. 8月9日,东莞松山湖沸腾的一天,华为消费者业务CEO余承东发布了鸿蒙操作系统,中文来自山海经,英文叫HarmonyOS,不是以前传说的OakOS. 余承东在介绍鸿蒙OS开发初衷时表示:“随着全场景智慧时

细数2014年成长

冬天的来临,让我的心很冷,不想动,不想思考,不想说话,今年剩下的一些日子,我想也就这样了,不会再有什么变化了.打开文档,开始记录今年,展望明年.记录是为了抛弃过去一切,又想未来某天还能拾起,所以把它尘封在笔记里.之后就可让脑中的一切随风消散,没有任何思想负担,放空的心就能接纳更多新的内容. 细数2014年的成长  成长主要在意识形态上,至于技术,越来越难静下心来学了. 1.彻底离弃网络游戏 放弃网络游戏,开始把人生当做游戏.这个游戏只有一次机会,不能死,不能走错路,每一次选择都要经过深思熟虑.和

细数AutoLayout以来UIView和UIViewController新增的相关API&lt;转写&gt;

细数AutoLayout以来UIView和UIViewController新增的相关API – UIViewController篇 UILayoutSupport @property(nonatomic,readonly,retain) id<UILayoutSupport> topLayoutGuide NS_AVAILABLE_IOS(7_0); @property(nonatomic,readonly,retain) id<UILayoutSupport> bottomLay

年华细数 谁的幸福不知归途

年华细数  谁的幸福不知归途 文   沫子也 他今年大一,他喜欢她. 有别于一见钟情,他对她的喜欢更趋向于百转千回,这个时候的她,刚和男朋友分手,念大二.之所以说百转千回,还因为后来一起吃饭的时候,她问他彼此是什么时候见的第一面,他支吾半天竟想不起来,第一次见面,大抵没给他留下多少印象.只是在全社大会的时候,不期然的,她就坐在了他的旁边.他注意到她的眼神,月光一样清亮.散会后,报名参加活动的表格上,他没细想星期四自己有课,就把她填的兴趣组合唱班给照搬抄了下来.慢慢的因为工作关系,他们是朋友. 如

从VGA到GPU!细数二十年显卡发展历程

VGA有很多层涵义,本来是用于代表一个分辨率(您可能不了解VGA,但应该知道QVGA代表什么),随后被普遍称为显示输出接口.为了输出VGA分辨 率.提供VGA输出接口,显卡和VGA就有了不解之缘,显卡被称为VGA Card是有历史原因的,如果您对此感兴趣的话,请慢慢看: ● 什么是VGA? VGA,Video Graphic  Array,视频图形阵列,表示一组点阵图形,长640像素宽480像素,最初能够输出640×480分辨率的接口叫做D-Sub,也被称作VGA接口, 它是一个15针的梯形插头

细数AutoLayout以来UIView和UIViewController新增的相关API

UILayoutSupport 1 @property(nonatomic,readonly,retain) id topLayoutGuide NS_AVAILABLE_IOS(7_0); 2 @property(nonatomic,readonly,retain) id bottomLayoutGuide NS_AVAILABLE_IOS(7_0); 3 4 @protocol UILayoutSupport 5 @property(nonatomic,readonly) CGFloat l

细数人体器官仿生,还有哪些可开发的

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 人体器官列表(后续'借'张人体图过来 -- 读书人的事情,不能叫偷,叫窃,谐个音,就叫借了) 1.眼:摄像头: 2.耳:mic: 3.口:音箱或耳