加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中个魔术方法你都知道吗

发布时间:2022-07-19 14:40:18 所属栏目:PHP教程 来源:互联网
导读:No.1 __construct() public $sex; public function __construct($name = , $sex = 男, $age = 28) { $this-name = $name; $this-sex = $sex; $this-age = $age; }}注意:如果子类中定义了构造函数则不会调用其父类的构造函数。要执行父类的构造函数,需要在
  No.1 __construct()
 
 
      public $sex;
 
   
 
      public function __construct($name = '', $sex = '男', $age = 28) {
 
          $this->name = $name;
 
          $this->sex = $sex;
 
          $this->age = $age;
 
      }}注意:如果子类中定义了构造函数则不会调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()
 
  NO.2 __destruct() [不常见]
 
 
 
 
  定义:类的析构函数
 
  解释:与构造函数相反,在类销毁之前执行一些操作,比如关闭文件、释放结果等。
 
  例子:
 
  主动调用 unset( $obj )主动调用 $obj = NULL程序自动结束
 
  NO.3 __call()
 
 
  定义:在对象中调用一个不存在的方法时 自动调用
 
  解释:为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。
 
  NO.4 __callStatic()
 
  定义:同上 不同在于调用静态方法时 自动调用
 
  NO.5 __get()
 
 
 
 
  定义:可以在对象的外部获取私有成员属性的值
 
  例子:private $name;function __construct($name="", $age=1){
 
      $this->name = $name;}public function __get($propertyName){   
 
      return $this->$propertyName;}// 通过Person类实例化的对象,并通过构造方法为属性赋初值$Person = new Person("小明", 60);// 直接访问私有属性name,自动调用了__get()方法可以间接获取echo "姓名:" . $Person->name . "<br>";
 
  No.6 __set()
 
 
 
  定义:与__get()类似 为私有属性赋值
 
  例子:public function __set($propertyName, $value){
 
      $this->$propertyName = $value;}
 
  No.7 __isset()
 
 
 
  定义:在类外部 判断属性isset()例子:public function __isset($content) {
 
      echo "当在类外部使用isset()函数测定私有成员{$content}时,自动调用<br>";
 
      echo  isset($this->$content);}echo isset($person->name);
 
  No.8 __unset()
 
  定义:在类外部删除私有变量时自动调用
 
  No.9 __sleep()
 
 
 
 
  定义:执行serialize时会被自动调用
 
  例子:public function __sleep(){
 
      $this->name = base64_encode($this->name);
 
  注意:此方法必须返回一个字符串,否则将发出一条 `E_RECOVERABLE_ERROR` 级别的致命错误。
 
   
 
  警告:不能在 __toString() 方法中抛出异常。这么做会导致致命错误。
 
  NO.12 __invoke()
 
 
 
  定义:当尝试以调用函数的方式调用一个对象生效
 
  例子:public function __invoke() {
 
      echo '拿我当函数用,我就会被自动调用';}$person = new Perseon();$person();
 
  No.13 __set_state()
 
  定义:调用var_export导出类时,该方法自动被调用。
 
  No.14 __clone()
 
 
 
 
 
  定义:尝试加载未定义的类
 
  例子:function  __autoload($className) {  
 
      $filePath = “project/class/{$className}.php”;  
 
      // 判断文件是否可读
 
      if (is_readable($filePath)) {  
 
          require($filePath);  
 
      }  }  if (条件A) {  
 
      $a = new A();  
 
      $b = new B();  
 
      $c = new C();  
 
      // … 业务逻辑  } else if (条件B) {  
 
      $a = newA();  
 
      $b = new B();  
 
      // … 业务逻辑  }注意:这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。
 
 
    }
 
    public function __construct() {
 
      spl_autoload_register ( array ($this, 'model' ) );
 
      spl_autoload_register ( array ($this, 'library' ) );
 
    }
 
    public function model($class) {
 
      $class = preg_replace ( '/_model$/ui', '', $class );
 
      set_include_path ( get_include_path () . PATH_SEPARATOR . '/model/' );
 
      spl_autoload_extensions ( '.model.php' );
 
      spl_autoload ( $class );
 
    }
 
    public function library($class) {
 
      set_include_path ( get_include_path () . PATH_SEPARATOR . '/lib/' );
 
      spl_autoload_extensions ( '.library.php' );
 
      spl_autoload ( $class );

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读