首頁 頭條 PHP中文網帶你看php建構方法與存取控制

PHP中文網帶你看php建構方法與存取控制

Jun 28, 2018 pm 02:23 PM

* 建構方法與存取控制(查詢器與設定器)

 * 建構方法:

 * 1.方法名稱固定: __constructor()

# * 2 .功能: 宣告物件建立時需要自動完成的操作,例如初始化物件屬性,或自動呼叫類別中的方法

 * 3.一個規範的類別,必須要有且只能有一個建構方法

 * 補充:以雙底線開始的方法,叫魔術方法,與普通方法相比:

 * 1.呼叫者不同: 由物件直接呼叫,使用者沒有權限

# * 2.呼叫場景不同: 在特定的場景下才可以呼叫,並且是自動呼叫

 * 常見的觸發魔術方法呼叫的場景有:

 * 1.物件初始化; 2.物件屬性的查詢與設定;3.物件複製;4.物件序列化;5.物件銷毀;6.其它場景... 

* 如果類別中宣告了建構方法,則屬性在宣告時不需要進行初始化

     * 你可能會奇怪,既然不再需要初始始,為什麼還要給$name一個空字串,$age為0,$stature為空數組?

     * 原因是:php是弱型別語言,目前陣列與物件已經支援型別提示,但是標量,如字串,數值型仍不支援,

     * 所以給屬性給一個代表其類型的初始值,可以起到類型提示的作用,這是一一個好習慣  

     * 

     * 類別中透過建構方法對類別屬性進行了初始化,就不再需要在類別的外部,直接透過賦值的方式進行類別屬性初始化了

     * 所以類別的屬性,也沒必要讓外部直接取得,為了安全,也為了資料封裝的需要,類別屬性應該不允許外部直接存取

     * 使用private 關鍵字來修飾類別屬性就可以

     * private: 只能在本類別方法中存取,不能外部,或子類別存取 

#     * 如果類別中屬性為私有,那麼應該對外提供一個存取介面

     * 此介面透過類別方法實現,存取控制為public,即類別外部可存取

     * 可以在介面方法中,對外部的存取進行必要的檢測,確保請求合法,資料安全有意義

     * 對於外部的查詢(即讀)操作,設定查詢器方法來解決

#     * 查詢器方法名稱推薦為: get 屬性名,屬性名首字大寫,採用駝峰命名法

     * 查詢器通常不需要傳入參數,如果傳入參數,一般是查詢條件** *

class GirlFriend2 
{
    //类属性:$name 姓名
    public $name = '';
    private $name = '';
    //类属性: 年龄
    public $age = 0;
    private $age = 0;
    
    //类属性: 身材三维stature['stætʃə]: 胸,腰,臀
    public $stature = [];
    private $stature = [];
    //声明构造方法
    public function __construct($name,$age, array $stature) {
        //初始化类成员属性
        $this->name = $name;
        $this->age = $age;
        $this->stature = $stature;
    }
      //查询器: getName() 获取女友姓名
   public function getName()
   {   
       //返回当前对象的name属性值
       return $this->name;
   }
    
    // 通过查询器限制非法用户对类属性的访问
   public function getName($yourName='')
   {
       if (!empty($yourName) && $yourName != '西门大官人' ) {
           return $this->name;
       }
       return '非法访问';
   }
    
    //一个方法中,尽可能只用一个return,否则会警告return语句过多,建议做如下修改
    //添加一个临时变量,这样可确保方法内只会一个return语句
    public function getName($yourName='')
    {
        //创建方法内部变量(局部变量),用来保存要返回的信息
        $msg = '非法访问';
        if (!empty($yourName) && $yourName != '西门大官人' ) {
            $msg = $this->name;
        }
        return $msg;
    }
    
    //下面对年龄和三维的访问,你也可以通过对姓名的限制方式进行访问控制
    //查询器: getAge() 获取女友年龄
    public function getAge()
    {   
        //返回当前对象的age属性值
//        return $this->age;
        //下面是改写一下当前方法,加入一些逻辑判断,仅做演示,实际功能自己扩展
        $msg = $this->age;
        if ($msg >= 50) {
            $msg .= ', 口味够重呀,大兄弟~~';
        } elseif ($msg < 18) {
            $msg .= &#39;, 未成年呢,求放过~~&#39;;
        }        
        return $msg;
    }
    
    //查询器: getStature() 获取女友身材信息
    public function getStature()
    {
        //返回当前对象的$stature属性值
        return $this->stature;
    } 
    
    
    /**
     * 设置器:也叫修改器,允许外部修改类的属性值
     * 参数一般有二个: 属性名与新的属性值
     * 因为属性名在方法中已经指定,这里只需要传入一个新的属性值即可
     */
    //下面通过设置器来控制对类属性的修改操作
    public function setName($value=&#39;&#39;)
    {
        return $this->name = $value;
    }
    
    //设置器更多的应用场景是会属性值进行过滤检测,例如年龄的范围
    public function setAge($value)
    {
        //年龄必须在18~120之间
        if (in_array($value,range(14,120))){
            $this->age = $value;
        }
    }
}
登入後複製


#
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24