PHP 魔术方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 魔术方法相关的知识,希望对你有一定的参考价值。

一、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

 

以上是关于PHP 魔术方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的常见魔术方法功能作用及用法实例

巧用PHP中__get()魔术方法

了解 PHP 中的魔术方法 [重复]

php魔术方法。。

php啥是魔术方法

php魔术方法__tostring