- 在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用。
1 class Car { 2 function __construct() { 3 print "父类构造函数被调用\n"; 4 } 5 } 6 class Truck extends Car { 7 function __construct() { 8 print "子类构造函数被调用\n"; 9 parent::__construct(); 10 } 11 } 12 $car = new Truck();
- 类的内部 :调用属性自身属性 $this->name 而static self::$name
- 如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
1 class Car { 2 private function __construct() { 3 echo ‘object create‘; 4 } 5 6 private static $_object = null; 7 public static function getInstance() { 8 if (empty(self::$_object)) { 9 self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 10 } 11 return self::$_object; 12 } 13 } 14 //$car = new Car(); //这里不允许直接实例化对象 15 $car = Car::getInstance(); //通过静态方法来获得一个实例
- 重载
- 属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
- 方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
- 对象序列化
- 可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
1 class Car { 2 public $name = ‘car‘; 3 } 4 $a = new Car(); 5 $str = serialize($a); //对象序列化成字符串 6 echo $str.‘<br>‘; 7 $b = unserialize($str); //反序列化为对象 8 var_dump($b);
- 单引号和双引号到底有啥区别呢?
-
PHP允许我们在双引号串中直接包含
字串变量
。而单引号串中的内容总被认为是普通字符。
比如:
$str=‘hello‘; echo "str is $str"; //运行结果: str is hello echo ‘str is $str‘; //运行结果: str is $str
-
时间: 2024-07-29 23:04:55