php -- 魔術方法 之 判斷屬性是否存在或為空:__isset()


屬性重載:當訪問一個不存在或者權限不夠的屬性的時候,能夠觸發一系列的魔術方法,就叫做屬性重載

 

__isset($name):當使用 isset()函數或者empty()函數 判斷屬性是否存在或者是否為空的時候會自動觸發

<?php

//屬性重載
class Person{
    //屬性
    public $name;
    private $age;

    //構造方法
    public function __construct($name,$age) {
        $this->name = $name;
        $this->age  = $age;
    }

   
}

//實例化
$person = new Person('羅納爾多',35);

//判斷
var_dump(isset($person->name));            //true
var_dump(isset($person->age));            //false

var_dump(empty($person->name));            //false
var_dump(empty($person->age));            //true

很顯然,屬性 age 是存在的,但是因為是私有的,所以訪問不到,就判斷isset的結果為false了,不符合邏輯

 

<?php

//屬性重載
class Person{
    //屬性
    public $name;
    private $age;

    //構造方法
    public function __construct($name,$age) {
        $this->name = $name;
        $this->age  = $age;
    }

    //isset魔術方法
    //需要一個參數知道要判斷的屬性的名字
    public function __isset($name){
        //新建一個允許判斷的數據
        //判斷當前元素是否在允許判斷的數組里
        //如果允許,在內部判讀,返回判斷結果
        //不允許,返回FALSE
        var_dump($name);
        return isset($this->$name);
    //return empty($this->$name)
//empty和isset外部所得到的結果 } } //實例化 $person = new Person('羅納爾多',35); //判斷 var_dump(isset($person->name)); //true 能訪問到,不經過__isset()魔術方法 var_dump(isset($person->age)); //true 訪問不到,經過__isset()魔術方法,判斷出age屬性是存在的,返回true var_dump(empty($person->name)); //false 能訪問到,不經過__isset()魔術方法 var_dump(empty($person->age)); //true 訪問不到,經過__isset()魔術方法,判斷出age屬性是存在的,返回true(與邏輯不符,所以需要在__isset()函數內部做判斷)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM