1.1面向对象的型与本
类是对象的抽象组织,对象是类的具体存在。
1.1.1对象的形
<?php class Person{ public $name; public $gender; public function say(){ echo $this->name,"is ",$this->gender; } } $student = new Person(); $student->name='Tom'; $student->gender='male'; $student->say();
1.1.2对象的本
1.1.3对象与数组
1.1.4对象与类
1.2魔术方法的应用
魔术方法是以两个下划线开头,具有特殊作用的一些方法
__construct方法就是一个标准的魔术方法,称为构造方法,定义了这个方法后,每次创建对象时都会先调用此方法,适合在使用对象之前做一些初始化工作;
如果构造函数定义了参数,则实例化对象必须传参,或者为参数定义默认值,否则会报错;
class Family{ public $people; public $location; public function __construct($p=null,$loc=''){ $this->people = $p; $this->location = $loc; } } new Family;
1.2.1 __set和__get方法
<?php class Account{ private $user = 1; private $pwd = 2; } $a = new Account; echo $a->user;
以上代码会报一个不允许访问私有属性的错误
<?php class Account{ private $user = 1; private $pwd = 2; public function __set($name,$value){ echo "Setting $name to $value \r\n"; $this->$name = $value; } public function __get($name){ if (!isset($this->$name)) { $this->$name='default value'; }else{ return $this->$name; } } } $a = new Account; echo $a->user; $a->user = 'haha'; echo $a->user;
增加__set和__get方法后代码能运行,php将这两个方法归类为重载,php的重载值动态的创建类的属性和方法。
这两个方法在访问的属性不存在时会调用,如果属性存在,是不调用的。
1.2.2 __call和__callStatic方法
如何防止调用不存在的方法而出错?使用__call魔术方法重载;
mixed __call(string $name,array $arguments)
当调用一个不可访问的方法时,__call方法会被调用。其中$name参数是要调用的方法名,$arguments参数是一个数组,包含着要传递给方法的参数,