一、php中的魔术方法
php在面向对象编程时有一些特殊的方法,会在特定的时机自动调用,我们将这类方法称为魔术方法。
二、常见的魔术方法及功能
1.构造函数 __construct():当类被实例化为一个对象时自动调用,主要用来完成对象生成时初始化属性。
例:
1 <?php 2 3 class App{ 4 5 public function __construct(){ 6 7 echo 1111; 8 } 9 10 } 11 12 $app=new App();//自动输出111
2.析构函数 __destruct():当对象使用完毕,销毁对象前会自动调用。
例:
1 <?php 2 3 class App{ 4 5 public function __construct(){ 6 7 echo 1111; 8 } 9 10 public function __destruct(){ 11 12 echo 2222; 13 } 14 $app=new App();//先输出111,在输出222
3.__isset($name):在外部检测类中某属性是否存在时,如果该属性为私有属性或未定义属性,就会自动触发__isset($name)方法。
例
<?php class App{ private $name=‘jack‘; public function __isset($name){ //$name为外部查询的属性名 if(isset($this->$name)){ echo‘ 请求不合法,你查询的是私有属性‘; }else{ echo ‘未定义的属性‘; } } } $app=new App(); isset($app->name); //结果:请求不合法,你查询的是私有属性; isset($app->age); //结果:未定义的属性
4.__unset() 在外部删除类中属性时,如果该属性为类的私有属性或该属性未定义时,自动触发__unset方法。
例:
<?php class App{ private $name=‘jack‘; public function __unset($name){ //$name为外部要删除的属性名 if(isset($this->$name)){ echo‘ 请求不合法,你删除的是私有属性‘; }else{ echo ‘未定义的属性‘; } } } $app=new App(); unset($app->name); //结果:请求不合法,你删除的是私有属性; unset($app->age); //结果:未定义的属性
5. __set($name,$value):当在外部给类中的属性赋值时,如果该属性未定义,则会触发__set($name,$value)。
例
<?php class App{ public function __set($name){ //$name为外部要赋值的属性名 echo 2222; } } $app=new App(); $app->name=‘jack‘; //结果:2222
6.__get($name):当在外部调用类的属性时,如果该属性未定义,则会触发__get($name)方法。
例
<?php class App{ public $name=‘jack‘; public function __get($name){ //$name为外部要调用的属性名 echo 333; } } $app=new App(); echo $app->name;//输出 jack; echo $app->age ;//结果:333;
7.__call($name):当在外部调用类中的方法时,如果该方法未定义,则会触发__call($name)方法。
例
<?php class App{ public function run(){ echo ‘去旅游‘; } public function __call($name){ //$name为外部要调用的方法名 echo 333; } } $app=new App(); echo $app->run();//输出 去旅游; echo $app->play() ;//结果:333;
8. __autoload($name):一般用来自动加载类,如果类的命名规范,且要引用的类比较多,或防止忘记引用时,可以使用自动加载功能。
例
<?php function __autoload($name){ include $name.‘class.php‘; } $app=new App();//会自动加载当前目录下的App.class.php
时间: 2024-11-05 06:07:14