尽管PHP的语法已经很松散,写起来很“爽”。但是对于像“我们”这种学过 Java、 C#的“完全面向对象程序员”来说,PHP程序设计语言里,还是有一些的坑的。下面请让我来盘点一下。
Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in......
错误原因:在PHP语法中,声明任何函数,函数名的前面需要 function 关键字。
classTest{
__construct(){echo ‘I am construction!‘;
}
}
正确示例:每一次声明函数(方法),都要写上“function”这个关键字。无论您想声明的是 __construct()这类魔术方法,还是自定义函数,都逃不出 function 的手掌心。
function__construct(){echo ‘I am construction!‘;
}
}
Fatal error: Access to undeclared static property: ......
错误原因:self::只能指向静态属性,而指向非静态属性只能用 $this->。
classPerson{function __construct($name){
self::$name = $name;
}private $name;
}$paul = new Person(‘paul‘);
正确方法:self::指向静态属性,$this->指向非静态属性。
classPerson{function __construct($name){$this->$name = $name;
}private $name;
}$paul = new Person(‘paul‘);
classPerson{function setBirthday($date){
self::$birthday = $date;
}static private $birthday;
}$paul = newPerson();$paul->setBirthday(‘1990-01-01‘);
Fatal error: Cannot redeclare A::__construct() in......
错误原因:PHP不支持函数重载
解决方法:使用PHP内置函数 func_num_args() 、func_get_arg() 、func_get_args()来模拟实现OOP的函数重载
echo ‘no argument‘;default:
echo ‘the number of arguments is ‘.func_num_args(). ‘
‘;$argumentArray = func_get_args();//遍历方法一
foreach($argumentArray as $key => $value){echo ‘the No‘. $key. ‘ argument is ‘. $value. ‘
‘;
}echo ‘
‘;//遍历方法二
for($i=0; $i‘;
}
}echo ‘
‘;
}
}newTest();new Test(1);new Test(1,2,3);
自动初始化对象
原文:http://www.cnblogs.com/fengyubo/p/3917586.html