<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # php魔術方法 魔術方法 | 方法用途| 觸發機制|示例 ---|---|---|--- __contract | 構造函數 | 示例化類時自動觸發 | [示例](#contract) __destruct | 析構函數 | 銷毀類時自動觸發 | [示例](#destruct) __call() | 方法重載 | 對象中調用一個不可訪問方法時自動觸發| [示例](#call) __callStatic() | 靜態方法重載 | 靜態上下文中調用一個不可訪問方法時自動觸發| [示例](#callstatic) __get() | 訪問屬性 | 訪問一個不存在或者私有屬性時觸發 | [示例](#get) __get() | 設置屬性 | 設置一個不存在或者私有屬性時觸發 | [示例](#set) __toString() | 以字符串輸出這個類 | 以字符串輸出這個類時觸發 | [示例](#tostring) # contract ```php <?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } class OtherSubClass extends BaseClass { // inherits BaseClass's constructor } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ``` --- # destruct 析構函數即使在使用 exit() 終止腳本運行時也會被調用。在析構函數中調用 exit() 將會中止其余關閉操作的運行。 ```php //試圖在析構函數(在腳本終止時被調用)中拋出一個異常會導致致命錯誤。 <?php class MyDestructableClass { function __construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Destroying " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ``` --- # call `$name`參數是要調用的方法名稱。`$arguments`參數是一個枚舉數組,包含著要傳遞給方法 $name 的參數。 ```php <?php class MethodTest { public function __call($name, $arguments) { // 注意: $name 的值區分大小寫 echo "Calling object method '$name' " . implode(', ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('in object context'); ``` --- # callStatic `$name`參數是要調用的方法名稱。`$arguments`參數是一個枚舉數組,包含著要傳遞給方法`$name`的參數。 ```php <?php class MethodTest { /** PHP 5.3.0之后版本 */ public static function __callStatic($name, $arguments) { // 注意: $name 的值區分大小寫 echo "Calling static method '$name' " . implode(', ', $arguments). "\n"; } } $obj = new MethodTest; MethodTest::runTest('in static context'); ``` --- # get 在程序運行過程中,通過它可以在對象的外部獲取私有成員屬性的值。或者未定義的成員屬性 ```php <?php class OOP { public function __get($name) { echo 'get key: '.$name; } } $oop = new OOP(); $oop->name;// output: get key: name ``` # set __set($name, $value)方法用來設置私有屬性, 給一個未定義的屬性賦值時,此方法會被觸發,傳遞的參數是被設置的屬性名和值。 ```php <?php class OOP { public function __set($name, $value) { echo 'get key: '. $name .' value : '.$value; } } $oop = new OOP(); $oop->name = 'shiwenyuan'; // output:get key: name value : shiwenyuan ``` # toString 是在直接輸出對象引用時自動調用的, 前面我們講過對象引用是一個指針,比如 說:`$p=new Person()`中,$p就是一個引用,我們不能使用`echo`直接輸出$p,這樣會輸出**Catchable fatal error: Object of class Person could not be converted to string**這樣的錯誤,如果你在類里面定義了`__toString()`方法,在直接輸出對象引用的時候,就不會產生錯誤,而是自動調用 了`__toString()`方法, 輸出`__toString()`方法中返回的字符,所以`__toString()`方法一定要有個返回值(`return` 語句)。 ```php <?php // Declare a simple class class TestClass { public $foo; public function __construct($foo) { $this->foo = $foo; } //定義一個__toString方法,返加一個成員屬性$foo public function __toString() { return $this->foo; } } $class = new TestClass('Hello'); //直接輸出對象 echo $class; // output: Hello ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看