首页 > 代码库 > 细数php语法里的那些“坑”
细数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 的手掌心。
<?phpclass 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//正确代码 $thisclass 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的函数重载
<?phpclass 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);
自动初始化对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。