php面向对象全攻略 (九)访问类型
2015-01-24信息快讯网
类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5 的新特性,但却是OOP 语言的一个好的特性。而且大多数OOP 语言都已支持此特性。
13.访问类型类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5 的新特性,但却
是OOP 语言的一个好的特性。而且大多数OOP 语言都已支持此特性。PHP5 支持如下3 种访
问修饰符
public (公有的、默认的),private (私有的)和protected (受保护的)三种。
public 公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
这个类成员(包括成员属性和成员方法),在PHP5 之前的所有版本中,PHP 中类的成员都是
public 的,而且在PHP5 中如果类的成员没有指定成员访问修饰符,将被视为public。
例:public $name;
public function say(){};
private 私有修改符,被定义为private 的成员,对于同一个类里的所有成员是可见的,即
是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不
能访问private 修饰的成员。
例:private $var1 = ‘A'; //属性
private function getValue(){} //函数
protected 保护成员修饰符,被修饰为protected 的成员不能被该类的外部代码访问。但是
对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的
子类都不具有访问其属性和方法的权限。
例:protected $name;
protected function say(){};
private protected public
同一个类中 √ √ √
类的子类中 √ √
所有的外部成员 √
代码片段
<?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; //Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
//We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello(){
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; //Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, not Private
?>
代码片段
<?php
/**
* Define MyClass
*/
class MyClass{
// Contructors must be public
public function __construct() { }
// Declare a public method
public function MyPublic() { }
// Declare a protected method
protected function MyProtected() { }
// Declare a private method
private function MyPrivate() { }
// This is public
function Foo() {
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); //Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private work
/**
* Define MyClass2
*/
class MyClass2 extends MyClass{
// This is public
function Foo2(){
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private
?>
另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类
被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是protected 那么子类中要覆盖的权限就要是protected
和public,如果父类的方法是public 那么子类中要覆盖的方法只能也是public,总之子类中的
方法总是要高于或等于父类被覆盖方法的访问权限。
FirePHP 推荐一款PHP调试工具
在smarty模板中使用PHP函数的方法
对text数据类型不支持代码页转换 从: 1252 到: 936
fleaphp crud操作之find函数的使用方法
fleaphp crud操作之findByField函数的使用方法
fleaphp常用方法分页之Pager使用方法
PHP中限制IP段访问、禁止IP提交表单的代码
php强制下载类型的实现代码
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
PHP中=赋值操作符对不同数据类型的不同行为
php目录操作函数之获取目录与文件的类型
PHP访问MYSQL数据库封装类(附函数说明)
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
php下用cookie统计用户访问网页次数的代码
PHP 根据IP地址控制访问的代码
php面向对象全攻略 (十) final static const关键字的使用
php面向对象全攻略 (八)重载新的方法
php面向对象全攻略 (七) 继承性
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
php面向对象全攻略 (五) 封装性
php面向对象全攻略 (四)构造方法与析构方法
PHP 类型转换函数intval
phpmyadmin 访问被拒绝的真实原因
C# Assembly类访问程序集信息
PHP mb_convert_encoding 获取字符串编码类型实现代码
PHP 文件类型判断代码
php IP及IP段进行访问限制的代码
php下实现在指定目录搜索指定类型文件的函数
常用的php对象类型判断