《深刻PHP與jQuery開發》讀書筆記——Chapter3

《深刻PHP與jQuery開發》第三章學習筆記

1.PHP的魔術方法(在對象中發生某些例行事件時會自動調用這些方法)

  • PHP提供了魔術方法__construct()(構造函數),在新對象被建立時會被自動調用;
  • 要在對象被銷燬時自動調用一個函數,可使用__destruct()(析構函數)的魔術方法。在須要作類清理工做(例如,關閉數據庫鏈接)時它就很是有用。
  • 要顯式地觸發析構行爲,能夠用unset()函數銷燬這個對象。
  • 將類輸出爲字符串,要將MyClass類輸出爲一個字符串而不發生錯誤,須要定義另外一個魔術方法__toString()。若是沒有定義__toString()方法就輸出對象會發生致命錯誤(程序中止運行)。在沒有定義__toString()方法的狀況下用echo指令輸出對象:
<?php
    class MyClass {
        public $var = "MyClass";
        
        public function __construct() {
            echo 'The class "',__CLASS__,'" was initialized!<br/>';
        }
        
        public function __destruct() {
            echo 'The class "',__CLASS__,'" was destroyed!<br/>';
        }

        public function __toString() {
            echo "Using the toString method: ";
            return __CLASS__;
        }
    }

    $myclass = new MyClass;
    
    var_dump($myclass);  //直接打印類變量
    echo $myclass;   //調用__toString方法

    unset($myclass);

2.繼承與派生

  • 2.1.要改變新類中繼承來的屬性或者方法,只須要在新類中從新聲明這個屬性或方法,就能夠簡單地覆蓋掉它。
  • 2.2.若是是要覆蓋時保留被覆蓋方法的功能,只須要在保留原方法功能的基礎上,要爲繼承得來的方法添加新功能,使用parent關鍵字加上做用域解析符(::)。

3.屬性或方法的可見度

  • 3.1.公開的屬性和方法public
  • 3.2.受保護的屬性和方法protected。若一個屬性或方法被聲明爲受保護的protected,就只能在本類或者其後代(即繼承了包含受保護方法的類的那些類)內部訪問它。
  • 3.3.一個屬性或方法若被聲明爲private,就只能在定義它的類內訪問。這意味着,即使是子類,也不能訪問該屬性或方法。
  • 3.4.一個方法或屬性若被聲明是靜態的,則不須要生成類的實例就能夠訪問它。只須要提供類的名字,加上做用域解析符和屬性或方法的名字便可。使用靜態屬性的最大的好處是,在腳本的生命期內它們能記住自身儲存的值。這意味着若是修改了一個靜態屬性,並稍後在腳本中訪問它,修改後的值仍然在。

注意:在訪問靜態屬性時,美圓符號($)要放在做用域解析符(::)以後。如:self::$count,MyClass::plusone(),MyClass::$count等。php

4.文檔塊註釋

文檔塊使用塊註釋的開頭再多加一個星號的方式定義:jquery

/**
 * 這是一個最基本的文檔塊
 * /

經常使用標籤:git

  • @author
  • @copyright——當前元素的版權年份及版權方名字
  • @license——當前元素的受權文件連接
  • @var——變量或類屬性的類型和描述
  • @param——函數或方法的返回值類型及其描述。
  • @return——函數或方法的返回值類型及其描述。

一個簡單的例子:github

<?php
/**
 *
 * 一個簡單的類
 * @author Sysublackbear
 * @copyright 2014 SYSU
 * @license http://sysublackbear.github.io
 * /
 class SimpleClass {
    /**
     * 一個公開變量
     *
     * @var string 保存類的數據
     */
    public $foo;
    /**
     * 在類實例化時給$foo賦一個新值
     *
     * @param string $var一個必須提供的值,供類初始化使用
     * @return void
     * /
    public function __construct($val) {
        $this->foo = $val;
    }

    /**
     * 兩個整數相乘
     *
     * 接受一對整數做爲參數,返回它們的積
     *
     * @param int $bat一個數字
     * @param int $baz一個數字
     * @return int兩個參數的積
     * /
    public function bar($bat,$baz) {
        return $bat*$baz;
    }
}

?>

5.採用OOP對代碼進行更好的組織

OOP的另外一個好處是它很是便於代碼打包和分類。每一個類一般都放入一個單獨的文件,若是採用統一的命令約定,訪問一個類就極其簡單。數據庫

假設你有一個程序有150個類,這些類由程序根目錄下的一個控制文件動態調用。全部這150個類文件都遵照一樣的命名約定:class.classname.inc.php,而且這些文件都被放在你應用程序的inc目錄當中。數組

在這個控制文件中實現PHP的__autoload()函數,就可以在某個類實例化時動態載入這個類,而沒必要爲了以防萬一在控制文件中包含全部150個類,或者本身費心勞力地想別的辦法來包含這些文件:函數

<?php
    function __autoload($class_name) {
        include_once('inc/class.'.$class_name.'.inc.php';
    }
?>

把每一個類放到一個單獨的文件,這樣作很是有利於代碼的移植,同時也使代碼在新項目中重用更容易(無需大段複製粘貼代碼)。oop

6.採用OOP更容易維護

只要運用得當,OOP天生具備簡潔緊湊的特色,與面向過程的代碼相比,面向對象的代碼定位和修改起來都很是容易。學習

若是某個信息數組增長了一個新的屬性,面向過程代碼可能須要修改每一個使用這個數組的函數(在最壞的狀況下),以便增長這個屬性。this

而面向對象的應用程序只須要添加新的屬性,再添加上處理這個屬性的方法,就能輕鬆地完成更新。

The END

相關文章
相關標籤/搜索