码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2014-08-20 12:19:22      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   使用   io   strong   for   

尽管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语法里的那些“坑”,布布扣,bubuko.com

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

标签:style   blog   color   java   使用   io   strong   for   

原文地址:http://www.cnblogs.com/fengyubo/p/3917586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!