php代码
<?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代码
<?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
?>
<?php
class test
{
private $foo;
public function construct($foo)
{
$this->foo = $foo;
}
private function bar()
{
echo 'accessed the private method.';
}
public function baz(test $other)
{
// we can change the private property:
$other->foo = 'hello';
var_dump($other->foo);
// we can also call the private method:
$other->bar();
}
}
$test = new test('test');
$test->baz(new test('other'));
?>
以上例程会输出:
string(5) hello
accessed the private method.
以上就是php: 关于访问控制(可见性)的示例代码分享的详细内容。