《php与MySQL Web开发》-读书笔记二

来源:互联网 发布:好听的淘宝优惠群取名 编辑:程序博客网 时间:2024/03/29 02:34

15 理解作用域
变量的作用域可以控制变量在哪里是可见并且可用的。不同的编程语言有不同的变量作用域规则。PHP具有相当简单的规则:
1 在函数内部声明的变量作用域是从声明它们的那条语句开始到函数末尾。这叫做函数作用域。这些变量称为局部变量

<?phpfunction fun(){    try {        $ob = new obj;    } catch(Exception $e) {        echo $e->getMessage();    }    $ob->g();  //注意:$ob变量并没有出函数作用域}

2 在函数外部声明的变量作用域是从声明它们的那条语句开始到文件末尾,而不是函数内部。这叫做全局作用域。这些变量称为全局变量
3 特殊的超级全局变量在函数内部和外部都是可见的。例如,_GET,_POST,_FILE.等。
4 使用require() 和include()并不影响作用域。如果这两个语句用于函数内部,函数作用域适用。如果它不在函数内部,全局作用域适用。
5 关键字global可以用来手动指定一个字函数中定义或使用的变量具有全局作用域。
6 通过调用 unset($variable_name) 可以手动删除变量。如果变量删除,它就不在参数所指定的作用域中了。

16 子类调用基类的函数

<?phpclass A{    public function __construct()    {        echo "A::__construct()";    }    public function fun()    {        echo "A::fun()";    }}class B extends A{    public function __construct()    {        A::__construct(); // 第一种调用父类构造函数的方法        parent::__construct(); // 第二种调用父类函数的方法        echo "B::__construct()";    }}class C extends B{    public function fun()    {        parent::fun(); // 第一种调用父类方法        A::fun(); // 第二种使用基类名::函数名调用基类的函数(包括静态函数)    }}?>

17 new self()和new self()的区别
专业解释:
self refers to the same class whose method the new operation takes place in.
static in PHP 5.3’s late static bindings refers to whatever class in the hierarchy which you call the method on.
In the following example, B inherits both methods from A. self is bound to A because it’s defined in A’s implementation of the first method, whereas static is bound to the called class (also see get_called_class() ).

class A {  public static function get_self() {    return new self();  }  public static function get_static() {    return new static();  }}class B extends A {}echo get_class(B::get_self()); // Aecho get_class(B::get_static()); // Becho get_class(A::get_static()); // A

参考资料:http://blog.csdn.net/wlywly1987/article/details/6956319

18 使用类的成员变量

class A{    public $_pub = 0;     private $_pri = 0;    public function __construct()    {        $this->_pub = 1; // 注意:不是$this->$_pub        $this->_pri = 2;     }}$a = new A();echo $a->_pub; // 打印 1,注意:不是$a->$_pub;echo $a->_priv; // error, cannot access private property

19 使用类的静态变量

class B{    private static $_s1 = 0;    public static $_s2 = 0;    public function __construct()    {        self::$_s1 = 1; // 注意:使用self::$_s1 不要忘记$        self::$_s2 = 2;    }}$b = new B();$b->$_s2; //error,必须使用类名::变量echo E::$_s1; // ok
0 0