PHP中类的魔术方法总结

PHP中对对象设计了15个非常有用的魔术方法,分别是__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()。这些魔术方法有助于对象在不同的情况下自动的实现一些行为,如初始化对象自动赋值、对象被销毁时发出提示信息等等。下面对这些魔术方法的功能进行简要总结。 __construct() 和 __destruct() __construct()方法是类的构造函数,它在类被实例化为对象时执行。通常用于把一些成员属性初始化为指定值。 __destruct()方法是类的析构函数,它在对象被销毁时执行,通常为对象失去引用时以及程序运行结束时。析构函数没有参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php class Person{ var $sex; var $name; var $age; function __construct($name = "Nobody", $sex = "Unknown", $age = 1) { $this->name = $name; $this->sex = $sex; $this->age = $age; } function __destruct(){ echo "I'm "....

Oct. 23, 2019 · 6 min · 1276 words

PHP面向对象的关键字

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。 PHP为面向对象编程提供了很多的关键字和魔术方法,当然其中一些关键字和魔术方法在其他的面向对象编程语言中也存在,如Java。下面对这些关键字和魔术方法做一个总结。 PHP中的关键字 特殊对象引用$this、$that、self、parent $this 用于在类的实例化对象内部访问这个对象的非静态成员。 $that 用于__clone()魔术方法中,$that为被克隆的原对象,$this为克隆出来的那个对象。 self 用于在类的实例化对象内部访问这个类的静态成员。 parent 用于在某个类的子类对象中访问其父类的成员(通常是静态成员,但有时候可能是实例成员)。 private、protected、public 这三个关键字是用于PHP的访问类型控制的,我们可以使用这些关键字来对类中的属性与方法进行访问权限的设置,并且可以对类进行封装。 private关键字表示私有,使用private的属性和方法对同一个类内里面的所有成员都没有访问的限制,但是在这个类外部的任何位置都不能够访问和操作。 protected关键字表示受保护,使用protected的属性和方法在该类本身以及这个类的子类和父类中没有访问限制,但是在这个类以及它的子类和父类的外部代码中依然不具有对protected属性和方法的访问权限。 public关键字表示公共,也就是说使用public的属性和方法在程序的任何位置都可以被访问和操作。在PHP中,如果没有为成员指定访问控制关键字,那么默认这个成员为public。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // 这行能被正常执行 echo $obj->protected; // 这行会产生一个致命错误 echo $obj->private; // 这行也会产生一个致命错误 $obj->printHello(); // 输出 Public、Protected 和 Private class MyClass2 extends MyClass { // 可以对 public 和 protected 进行重定义,但 private 而不能 protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // 这行能被正常执行 echo $obj2->private; // 未定义 private echo $obj2->protected; // 这行会产生一个致命错误 $obj2->printHello(); // 输出 Public、Protected2 和 未定义 private 的错误 避免踩坑:在验证PHP的访问控制机制时,需要在PHP配置文件php....

Oct. 23, 2019 · 3 min · 548 words

PHP中对数组的操作

数组的声明 PHP中有两种数组:索引数组和关联数组。索引数组的索引是从0开始递增的数字,由程序自动生成;关联数组使用字符串作为索引值,由用户自行输入。 初始化时直接赋值 1 2 3 4 5 6 7 8 9 //索引数组 $example[0] = "a"; $example[1] = "b"; $example[2] = "c"; //关联数组 $example_1["a"] = "1"; $example_1["b"] = "2"; $example_1["c"] = "3"; 若要按默认索引顺序声明索引数组,可以不用填入索引值,程序自动按声明顺序为键值建立索引: 1 2 3 $example[] = "a"; //索引为0 $example[] = "b"; //索引为1 $example[] = "c"; //索引为2 通过array()函数创建 1 2 3 4 5 //索引数组 $example = array("a", "b", "c"); //关联数组 $example_1 = array("a" => "1", "b" => "2", "c" => "3"); 多维数组的创建使用array()函数嵌套完成:...

Oct. 19, 2019 · 10 min · 1960 words