1. 程式人生 > >php 類 屬性和方法的關系

php 類 屬性和方法的關系

未定義 per const obj foo 實例化 聲明 self 產生

  一 . 屬性關系

    1 . public屬性:在類的外部和內部都可以調用 被繼承能夠重構

    2 . protected屬性:在類的內部可以調用外部不能可以被繼承並且重構

    3 . private屬性:只有在類的內部調用 不能被繼承

    4 . static屬性:類的內部和外部都能調用 內部調用方法(self::屬性變量) 外部調用方法(類名::屬性變量)

  二 . 方法關系

    1 . public方法:在類的外部和內部都可以調用 可以被繼承

    2 . protected方法:在類的內部可以調用外部不能 可以被繼承

    3 . private方法:只有在類的內部調用 不可以被繼承

    4 . static方法:外部內部都可以調用 內部調用方法($this->方法名) 外部調用發法(類名::方法名)

  三 . final 說明

    1 . final---用於類、方法前。

    2 . final類---不可被繼承。

    3 . final方法---不可被覆蓋。

   四 . 下面是自己寫的測試demo

<?php

    /**
     * DEFINE MyClass1
     * Date 2019-3-14
     * Author QQ28281633
     */
    class
MyClass1 { //聲明一個公共的變量 public $public = ‘Public‘; //聲明一個受保護的變量 protected $protected = ‘Protected‘; //聲明一個私有的變量 private $private = ‘Private‘; function printAll() { echo $this->public; echo $this->protected
; echo $this->private; } } //實例化對象 $obj = new MyClass1(); echo $obj->public; //正常輸出: Public echo $obj->protected; //報錯:Cannot access protected property echo $obj->private; //報錯:Cannot access protected property $obj->printAll(); //正常輸出 Public Protected Private /** * DEFINE MyClass2 * Date 2019-3-14 * Author QQ28281633 */ class MyClass2 extends MyClass1{ // 可以對 public 和 protected 進行重定義,但 private 而不能 public $public = ‘Public2‘; protected $protected = ‘Protected2‘; static $a = 1; function printAll(){ echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // 這行能被正常執行 echo $obj2->private; // 未定義 private echo $obj2->protected; // 這行會產生一個致命錯誤 $obj2->printAll(); // 輸出 Public Protected2 和 Undefined /** *DEFINE MyClass3 * 類中方法的訪問控制 */ class MyClass3{ //聲明一個共有的構造函數 public function __construct(){} //聲明一個共有的方法 public function myPublic(){ return ‘myPublic‘; } //聲明一個受保護的方法 protected function myProtected(){ return ‘myProtected‘; } //聲明一個私有的方法 private function myPrivate(){ return ‘myPrivate‘; } //檢查輸出所有方法 public function printAll(){ echo $this->myPublic(); echo $this->myProtected(); echo $this->myPrivate(); } } $obj3 = new MyClass3; echo $obj3->myPublic(); //正常執行 echo $obj3->myProtected(); //報錯 echo $obj3->myPrivate(); //報錯 $obj3->printAll(); //三個方法在類的內部均可正常執行 class Tests { public function test() { $this->testPrivate(); $this->testPublic(); $this->testStatic(); } public function testPublic() { echo "1"; } private function testPrivate() { echo "2"; } public static function testStatic(){ echo 3; } } $myFoo = new Tests(); Tests::testStatic(); $myFoo->test(); /** * Class Math * final 解釋 */ class Math { public final function max(){ echo 1; } } //聲明類SuperMath 繼承自 Math類 class SuperMath extends Math { public final function max(){ echo 2; } } //執行會出錯,final方法不能被重寫。 ?>


php 類 屬性和方法的關系