Private, Public 和 Protected 在PHP4中,你可以在对象的外面操作它任意的方法和变量--因为方法和变量是公用的。在PHP5引用了3种模式来控制对变量、方法的控制权限:Public(公用的)、Protected(受保护)和Private(私有)
Public:方法和变量可以在任意的时候被访问到,子类可以重定义覆盖
Private:只能在类的内部被访问,子类也不能访问,子类可以重定义,各自独立
Protected:只能在类的内部、子类中被访问,不能重定义覆盖
Static: 类的静态成员和方法都不能被子类重定义
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
static : 声明类的成员和方法为静态。作用:不需要实例化就可以被访问。使用:: 符号,外部使用方式为Class::$member和Class::method;内部使用方式self::$member和self::method。子类的使用方式parent::$member和parent::method 使用注意:
1. 类的静态成员不能被类的实例访问,即不能用箭头-<访问,而静态方法可以被类的实例访问。
2. 类的静态成员和方法都不能被子类重定义。意味着只能被本类使用,起到保护作用。 3. 类的静态方法内部不能使用$this伪变量,因为$this是指向类的实例的,会与static的作用发生矛盾。
const: 定义类的常量。使用注意:不能被类的实例访问。 <?php class
MyClass {
const constant = 'constant value';
function showConstant() { echo self::constant . "\n"; } }
echo MyClass::constant . "\n";
// echo $class::constant; is not allowed(这个是实例后访问)
声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。
为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public。
由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。
1,static关键字在类中是,描述一个静态成员的;
2,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享;
3,类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数;
4,类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
final:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
const
const是一个定义常量的关键字,能够定义一个常量,如果在程序中改变了它的值,那么会出现错误。
例子4:Public, protected and private <?php class foo { private $x; public function public_foo() { print("I'm public"); } protected function protected_foo() { $this->private_foo(); //Ok because we are in the same class we can call private methods print("I'm protected"); } private function private_foo() { $this->x = 3; print("I'm private"); } } class foo2 extends foo { public function display() { $this->protected_foo(); $this->public_foo(); // $this->private_foo();// Invalid! the function is private in the base class } } $x = new foo(); $x->public_foo(); //$x->protected_foo();//Invalid cannot call protected methods outside the class and derived classes //$x->private_foo();//Invalid private methods can only be used inside the class $x2 = new foo2(); $x2->display(); ?> 提示:变量总是私有形式,直接访问一个私有变量并不是一个好的OOP思想,应该用其他的方法来实现 set/get 的功能
(1) static
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属 于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实 例共享,类的静态方法也是一样的,类似于全局函数。类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用 this会出错。
(关于this和self的异同,请参考: http://blog.csdn.net/heiyeshuwu/archive/2004/11/03/165828.aspx )
(2)const
const是一个定义常量的关键字,类似于C中的#define,能够定义一个常量,如果在程序中改变了它的值,那么会出现错误。
例子:
public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:方法或者属性只能从类或者继承类的一个成员中访问到。
private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private便签标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。
view plaincopy to clipboardprint?
- <?php
- 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();
-
- class MyClass2 extends MyClass{
-
- protected $protected = 'Protected2';
- function printHello()
- {
- echo $this->public;
- echo $this->protected;
- echo $this->private;
- }
- }
- $obj2 = new MyClass2();
- echo $obj->public;
- echo $obj2->private;
- echo $obj2->protected;
- $obj2->printHello();
- ?>
每个修饰符的定义:
public:公共成员即可以通过对象外部使用,也可以使用特殊变量$this从内部的方法访问。如果另外一个类继承了这个公共变量,这个规则同样适用,而且从这个类的对象的外部和内部的方法都可以访问。
protected:保护成员只能从对象内部的方法访问。如果另外一个类继承了一个保护的成员,同样的规则也适用,而且它可以从继承类实例化的对象的方法中通过特殊的$this变量访问到。
private:与私有成员和保护成员类似,因为它们都只能从对象内部的方法访问。但是,私 有成员不能从继承类实例化的对象方法访问。因为私有属性在继承的类中是看不到的。而且两个相关的类可以分别声明一个名字相同的私有变量。也就是两个类都只 能看到自己的私有属性,私有成员之间是没有关系的。