一、 __construct(),类的构造函数
php中构造方法是对象创建完成后第一个被对象自动调用的方法。在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法。
1、 构造方法的作用
通常构造方法被用来执行一些有用的初始化任务,如对成员属性在创建对象时赋予初始值。
2、 构造方法的在类中的声明格式
function __constrct([参数列表]){方法体 //通常用来对成员属性进行初始化赋值}
在类中声明构造方法需要注意的事项:
1、在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。
2、构造方法名称是以两个下画线开始的__construct()
<?phpclass Student{public $name;public $age = 18;//显示声明一个构造方法且带参数public function __construct($n,$age){$this->name = $n;$this->age = $age;}public function info(){echo '我是:'.$this->name.' 今年:'.$this->age;}}$obj = new Student('张三',20);$obj->info();
二、__destruct(),类的析构函数
析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。
析构方法是PHP5才引进的新内容,与构造方法对应
析造方法的声明格式与构造方法
__construct()比较类似,也是以两个下划线开始的方法__destruct(),这种析构方法名称也是固定的。
1、 析构方法的声明格式
function __destruct(){//方法体}
注意:析构函数不能带有任何参数。
2、 析构方法的作用
一般来说,析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁前的清理任务。
<?phpclass Student{public $name;public $age = 18;//显示声明一个构造方法且带参数public function __construct($n,$age){$this->name = $n;$this->age = $age;}public function info(){echo '我是:'.$this->name.' 今年:'.$this->age.'<br>';}//析构函数public function __destruct(){echo "销毁 " . $this->name . "<br>";}}$obj = new Student('张三',20);$obj->info();
三、 __call(),在对象中调用一个不可访问方法时调用。
该方法有两个参数,第一个参数
$function_name会自动接收不存在的方法名,第二个$arguments则以数组的方式接收不存在方法的多个参数。
1、 __call()方法的格式:
function __call(string $function_name, array $arguments){// 方法体}
2、 __call() 方法的作用:
为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用
__call()方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。
<?phpclass Student{//私有的成员属性private $name = "张三";private $age = 24;// 当访问不存在或不可访问的方法时,魔术方法__call()自动调用// 参数:$func是传递过来的方法名称,$arrs是传递过来的参数数组public function __call($func,$arrs){echo "方法{$func}(".implode(',', $arrs).")不存在或不可访问!";}}//创建学生类对象$obj = new Student();// 调用对象中不存在的方法,则自动调用了对象中的__call()方法$obj->showInfo("张三",24);
四、 __callStatic(),用静态方式中调用一个不可访问方法时调用
此方法与上面所说的 call() 功能除了
callStatic()是未静态方法准备的之外,其它都是一样的。
<?phpclass Student{//私有的成员属性private $name = "张三";private $age = 24;//用静态化方式访问不存在或不可访问的方法时,魔术方法__callStatic()自动调用//参数:$func是传递过来的方法名称,$args是传递过来的参数数组public static function __callStatic($func,$args){echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";}}//用静态化方法调用showInfo()方法Student::showInfo('张三',24,'男');
五、 __get(),获得一个类的成员变量时调用
在 php 面向对象编程中,类的成员属性被设定为
private后,如果我们试图在外面调用它则会出现“不能访问某个私有属性”的错误。那么为了解决这个问题,我们可以使用魔术方法__get()。魔术方法__get()的作用:
在程序运行过程中,通过它可以在对象的外部获取私有成员属性的值。
<?phpclass Student{// 私有的成员属性private $name = "张三";private $age = 24;// 当访问不可访问是属性时,__get()魔术方法会自动调用public function __get($n){return $this->$n;}}// 创建学生类对象$obj = new Student();// 访问私有的属性echo "{$obj->name}的年龄是{$obj->age}岁";?>
六、 __set(),设置一个类的成员变量时调用
__set( $property, $value )方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。
<?phpclass Student{// 私有的成员属性private $name = "张三";private $age = 24;// 当给不可访问的属性赋值时,__set()魔术方法自动调用public function __set($n,$v){$this->$n = $v;}}// 创建学生类对象$obj = new Student();// 修改私有属性$obj->name = '李四';$obj->age = 22;var_dump($obj);?>
七、 __isset()
__isset()的作用:当对不可访问属性调用 isset() 或 empty() 时,__isset()会被调用。
<?phpclass Student{//私有的成员属性private $name = "张三";private $age = 24;// 当对不可访问的属性应用isset()或者empty()时,__isset()会自动调用public function __isset($n){return isset($this->$n);}}// 创建学生类对象$obj = new Student();// 判断私有属性是否存在if(isset($obj->name)){echo "存在";}else{echo "不存在或不可访问";}?>
八、 __unset(),当对不可访问属性调用unset()时被调用。
在对象里面加上了
__unset()这个方法之后,在对象外部使用“unset()”函数删除对象内部的私有成员属性时,对象会自动调用__unset()函数来帮我们删除对象内部的私有成员属性。
<?phpclass Student{//私有的成员属性private $name = "张三";private $age = 24;// 当对私有的属性应用unset()时,魔术方法__unset()自动调用public function __unset($n){unset($this->$n);}}//创建学生类对象$obj = new Student();// 删除对象属性unset($obj->name);var_dump($obj);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号