和其他语言一样,也是通过关键字public,protected,private的限制:
<?php
/**
* 定义MyClass
*/
class MyClass
{
public $public = 'Public';//公有
protected $protected = 'Protected';//保护
private $private = 'Private';//私有
function printHello()
{
echo $this->public;echo "<br/>";
echo $this->protected;echo "<br/>";
echo $this->private;echo "<br/>";
}
}
$obj = new MyClass();
echo $obj->public; // 可以
//echo $obj->protected; // 致命错误
//echo $obj->private; // 致命错误
$obj->printHello(); // 输出 Public, Protected and Private
/**
* 定义 MyClass2
*/
class MyClass2 extends MyClass
{
// 对于公有和保护方法或成员,我们可以重新声明,但私有的不可以
protected $protected = 'Protected2';
//重写
function printHello()
{
echo "这个是MyClass2的:";echo "<br/>";
echo $this->public;echo "<br/>";
echo $this->protected;echo "<br/>";
//echo $this->private;echo "<br/>";不能访问到父类的私有属性
}
}
$obj2 = new MyClass2();
echo $obj2->public; // 可以
//echo $obj2->private; // 未定义
//echo $obj2->protected; // 致命错误
$obj2->printHello(); // 输出 Public, Protected2, Undefined
?>
/**
* 定义MyClass
*/
class MyClass
{
public $public = 'Public';//公有
protected $protected = 'Protected';//保护
private $private = 'Private';//私有
function printHello()
{
echo $this->public;echo "<br/>";
echo $this->protected;echo "<br/>";
echo $this->private;echo "<br/>";
}
}
$obj = new MyClass();
echo $obj->public; // 可以
//echo $obj->protected; // 致命错误
//echo $obj->private; // 致命错误
$obj->printHello(); // 输出 Public, Protected and Private
/**
* 定义 MyClass2
*/
class MyClass2 extends MyClass
{
// 对于公有和保护方法或成员,我们可以重新声明,但私有的不可以
protected $protected = 'Protected2';
//重写
function printHello()
{
echo "这个是MyClass2的:";echo "<br/>";
echo $this->public;echo "<br/>";
echo $this->protected;echo "<br/>";
//echo $this->private;echo "<br/>";不能访问到父类的私有属性
}
}
$obj2 = new MyClass2();
echo $obj2->public; // 可以
//echo $obj2->private; // 未定义
//echo $obj2->protected; // 致命错误
$obj2->printHello(); // 输出 Public, Protected2, Undefined
?>
当然通过这些访问控制符,我们也可以对函数实现同样的可访问控制:
<?php
/**
* 定义 MyClass
*/
class MyClass
{
// 构造函数必须是public
public function __construct() { }
// 声明一个public 的方法
public function MyPublic() { }
// 声明 protected 方法
protected function MyProtected() { }
// 声明private 方法
private function MyPrivate() { }
// 默认是public的
function Foo()
{
//类里面可以直接访问
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); // 可以
$myclass->MyProtected(); // 致命错误
$myclass->MyPrivate(); //致命错误
$myclass->Foo();
/**
* 定义 MyClass2
*/
class MyClass2 extends MyClass
{
//public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // 致命错误
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 可以
$myclass2->Foo2();
/**
* 定义Bar
*/
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();
//通过继承来的公有方法Bar::test()
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>
/**
* 定义 MyClass
*/
class MyClass
{
// 构造函数必须是public
public function __construct() { }
// 声明一个public 的方法
public function MyPublic() { }
// 声明 protected 方法
protected function MyProtected() { }
// 声明private 方法
private function MyPrivate() { }
// 默认是public的
function Foo()
{
//类里面可以直接访问
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); // 可以
$myclass->MyProtected(); // 致命错误
$myclass->MyPrivate(); //致命错误
$myclass->Foo();
/**
* 定义 MyClass2
*/
class MyClass2 extends MyClass
{
//public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // 致命错误
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 可以
$myclass2->Foo2();
/**
* 定义Bar
*/
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();
//通过继承来的公有方法Bar::test()
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>
本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/106126,如需转载请自行联系原作者