PHP 魔术方法

PHP中魔术方法

__construct
__destruct
__set
__get
__isset
__unset

  • 下面是一个 Person 类
class Person
{
    private $name;
    private $sex;
    private $age;

    // 构造方法
    function __construct($name = '', $sex = '男', $age = 1)
    {
        echo __METHOD__ . PHP_EOL;
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }

    // 析构方法
    function __destruct()
    {
        echo __METHOD__ . PHP_EOL;
    }
    
    function say()
    {
        echo '我的名字: ' . $this->name . ' ,性别: ' . $this->sex . ' ,年龄: ' . $this->age . PHP_EOL;
    }

    function run()
    {
        echo $this->name . ' 在跑步' . PHP_EOL;
    }
}
  • 初始化时调用 __construct
$roy = new Person('roy', '男', 18); // Person::__construct
$roy->run(); // roy 在跑步
$roy->say(); // 我的名字: roy ,性别: 男 ,年龄: 18
  • 调用 __destruct
$roy = null; // Person::__destruct
  • __set
/**
     * @param string $propertyName 成员变量
     * @param mixed $propertyValue 成员变量对应的值
     */
    function __set($propertyName, $propertyValue)
    {
        echo __METHOD__ . ' ,参数: property- ' . $propertyName . '  ,value- ' . $propertyValue . PHP_EOL;
    }
$roy->name = 'lily'; // 自动调用 __set()
  • __get
/**
  * @param string $propertyName 成员变量
     */
    function __get($propertyName)
    {
        echo __METHOD__ . '参数: Property - ' . $propertyName . PHP_EOL;
    }
echo $roy->age; // 自动调用 __get()
  • __isset 和 __unset
function __isset($propertyName)
    {
        echo __METHOD__ . '参数 : ' . $propertyName . PHP_EOL;
    }

    function __unset($propertyName)
    {
        echo __METHOD__ . '参数 : ' . $propertyName . PHP_EOL;
    }
var_dump(isset($roy->name)); // 自动调用 __isset
unset($roy->age); // 自动调用 __unset
  • __call 当调用对象不存在的方法时会自动调用此方法
/**
     * @param string $functionName 方法名
     * @param array $arguments 传入的参数
     */
    function __call($functionName, $arguments)
    {
        // TODO: Implement __call() method.
    }

你可能感兴趣的:(PHP 魔术方法)