PHP面向對象特性-封裝

封裝
1、字段的作用域
public 公共的(類外可以訪問)
private 私有的(類內可以訪問)
protected 受保護的(類內和子類可以訪問,類外不可以)
2、創建使用私有的字段,這樣外部就無法訪問

class Computer{
        private $_name = '聯想';
        private $_model = 'LX';
        //通過公共方法來訪問私有字段
        function run(){
            echo $this -> _name;
        }
    }

3、屬性操作-私有字段的賦值與取值

class Computer{
        private $_name;
    //必須寫一個對內入口,對私有對象進行賦值
        public function setName($_name){
            $this->_name = $_name;
        }
    //必須寫一個對外入口,纔可以取到
        public function getName(){
            return $this->_name;
        }
    }
    $computer = new Computer();
    $computer -> setName('dell');
    echo $computer -> getName();

4、攔截器
當類外的對象直接調用私有字段時,會跟着去檢查是否有攔截器
如果直接對$_name進行賦值,那麼__set方法就會攔截住,就不會報錯了

    class Computer{
        private $_name;
        private $_model;
        private $_cpu;
        //採用攔截器進行賦值和取值
        //賦值
        public function __set($_key,$_value){
            $this->$_key = $_value;
        }
        //取值
        public function __get($_key){
            return $this->$_key;
        }
     }
    $computer = new Computer();
    $computer->_name = '聯想';
    $computer->_cpu = 'i7';
    $computer->_model = '四核';
    echo $computer->_name;
    echo $computer->_cpu;
    echo $computer->_model;

注意:__set() __get()方法被私有時,還是可以執行
因爲現在的指針已經在類內了
5、常量
在類中定義常量,用來表示不會改變的值,對於該類實例化的任何對象來說,常量值在對象的整個生命週期中都不變。

class Computer{
        const NAME = 'DELL';
    }
    echo Computer::NAME;

6、靜態類成員
eg1:非靜態,輸出結果:123 123

class Computer{
        public  $_count=0;

        public function __add(){
            $this->_count++;
        }
    }
    $computer1 = new Computer();
    $computer1->__add();
    echo $computer1->_count;
    $computer1->__add();
    echo $computer1->_count;
    $computer1->__add();
    echo $computer1->_count;
    $computer2 = new Computer();
    $computer2->__add();
    echo $computer1->_count;
    $computer2->__add();
    echo $computer1->_count;
    $computer2->__add();
    echo $computer1->_count;

eg2:靜態成員 輸出結果 123 456

class Computer{
        public static $_count=0;

        public function __add(){
            self::$_count++;
        }
    }
    $computer1 = new Computer();
    $computer1->__add();
    echo Computer::$_count;
    $computer1->__add();
    echo Computer::$_count;
    $computer1->__add();
    echo Computer::$_count;
    echo "<br>";
    $computer2 = new Computer();
    $computer2->__add();
    echo Computer::$_count;
    $computer2->__add();
    echo Computer::$_count;
    $computer2->__add();
    echo Computer::$_count;

7、靜態方法

class Computer{
        public static $_count = 0;
        public static function __run(){
            self::$_count++;
        }
    }
    Computer::__run();              
    Computer::__run();                 
    Computer::__run();  
    echo Computer:: $_count;                           

8、instanceof 關鍵字
使用它可以確定一個對象是類的實例,累得子類,還是實現了某個特定的接口,並進行相應的操作。

class Computer{

    }
    $computer = new Computer();
    echo ($computer instanceof Computer);
    //computer 是 Computer的實例。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章