php面向對象(OOP 編程)- 類訪問修飾符

類型的訪問修飾符容許開發人員對類成員的訪問進行限制,這是PHP5的新特性 php


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() { }
       //abstract protected function funProtect($param);抽象方法只能在抽象類中定義
	// 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
?>
相關文章
相關標籤/搜索