類的變量成員叫作屬性,屬性聲明是由關鍵字Public,Protected,Private作開頭,而後跟一個普通的變量聲明來組成,屬性中的變量能夠初始化,可是初始化的值必須是常數。php
若是直接使用var聲明屬性,而沒有用public,protected 或者private,php將會視爲public.函數
在類的成員方法裏面,能夠用->(對象運算符)好比$this->property(property是屬性名)這種方式 來訪問非靜態數據。this
靜態屬性則使用::(雙冒號)self::$property來訪問spa
舉個例子 調用類的成員方法code
<?php class SimpleClass{ public $name="Tome"; //若不聲明public 則默認是public $name="Tome"; } //實例化對象訪問屬性用-> $simple=new SimpleClass(); $simple->name; ?>
PHP 對屬性或方法的訪問控制,是經過在前面添加關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。對象
public(公有):公有的類成員能夠在任何地方被訪問。blog
protected(受保護):受保護的類成員則能夠被其自身以及其子類和父類訪問。io
private(私有):私有的類成員則只能被其定義所在的類訪問。function
類屬性必須定義爲公有,受保護,私有之一。若是用 var 定義,則被視爲公有。class
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // 這行能被正常執行 echo $obj->protected; // 這行會產生一個致命錯誤 echo $obj->private; // 這行也會產生一個致命錯誤 $obj->printHello(); // 輸出 Public、Protected 和 Private /** * Define MyClass2 */ class MyClass2 extends MyClass { // 能夠對 public 和 protected 進行重定義,但 private 而不能 protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj2->public; // 這行能被正常執行 echo $obj2->private; // 未定義 private echo $obj2->protected; // 這行會產生一個致命錯誤 $obj2->printHello(); // 輸出 Public、Protected2 和 Undefined ?>
類中的方法能夠被定義爲公有,私有或受保護。若是沒有設置這些關鍵字,則該方法默認爲公有。
<?php /** * Define MyClass */ class MyClass { // 聲明一個公有的構造函數 public function __construct() { } // 聲明一個公有的方法 public function MyPublic() { } // 聲明一個受保護的方法 protected function MyProtected() { } // 聲明一個私有的方法 private function MyPrivate() { } // 此方法爲公有 function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // 這行能被正常執行 $myclass->MyProtected(); // 這行會產生一個致命錯誤 $myclass->MyPrivate(); // 這行會產生一個致命錯誤 $myclass->Foo(); // 公有,受保護,私有均可以執行 /** * Define MyClass2 */ class MyClass2 extends MyClass { // 此方法爲公有 function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // 這行會產生一個致命錯誤 } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // 這行能被正常執行 $myclass2->Foo2(); // 公有的和受保護的均可執行,但私有的不行 class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?>