类的变量成员叫作属性,属性声明是由关键字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 ?>