访问控制


访问控制

对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。

对类成员的访问控制

类成员都必须使用关键字public、protected 或 private 进行定义

Example #1 声明类成员

<?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 
$obj->public// 这行能被正常执行
echo $obj2->private// 未定义 private
echo $obj2->protected// 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private

class Bar 
{
    public function 
test() {
        
$this->testPrivate();
        
$this->testPublic();
    }

    public function 
testPublic() {
        echo 
"Bar::testPublic ";
    }
    
    private function 
testPrivate() {
        echo 
"Bar::testPrivate ";
    }
}

class 
Foo extends Bar 
{
    public function 
testPublic() {
        echo 
"Foo::testPublic ";
    }
    
    private function 
testPrivate() {
        echo 
"Foo::testPrivate ";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

Note: 为了兼容性考虑,在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效(只是作为 public 关键字的一个别名)。在 PHP 5.1.3 之前的版本,该语法会产生一个 E_STRICT 警告。

对方法的访问控制

类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。

Example #2 声明类中的方法

<?php
/**
 * Define 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(); // Public、Protected 和 Private 都被调用了


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    
// This is public
    
function Foo2()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate(); // 这行会产生一个致命错误
    
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // Public 和 Protected 都被调用了,但 Private 不会被调用
?>


«  构造函数和析构函数
» 对象继承
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 工作心得经典语句 如果没有王子,我仍是公主(转载)作文800字 现代西门庆与潘金莲之后2 2015实习小结1000字 最是寂寥斜阳处,时光沉静无言中 不妨做只幸福的生活菜鸟 好久不见;那我们就见见吧 科协咨询中心2012年工作总结及2012年工作打算 性格比能力重要,根据自己性格找到合适工作 gggggggg 镇压原创 忆 娘留字 在公共汽车上作文1000字 春光不与四时同 真爱没有密码 QQ爱情感人日志:爱情的另一个名字——卑微 情未了,天难负 狗眼看人之“我”是小书童【1】 【现代诗】期盼花好月圆(之二) 我们能做些什么——观(今世缘.等着我)有感 描写对话说话的好段 请不要把爱分割(2)作文900字 2015银行货币信贷股青年文明号自查报告 节日商场促销活动总结 在市委六届三次全会上的总结讲话 我长大~~`~作文100字 同学聚会15年后感言 不是爱情不够美丽 关于生活在何方作文1100字 爱撒谎的妈妈作文350字 机械工程师简历 县建设局实践科学发展观违法违规占地建房调研报告 春迹1200字 糊涂的建筑师450字 我最闪亮 中考满分作文500字:读书让青春更美丽 感恩主题班会 早安心语:你不是爱情的终点,只是爱情的原动力 要做一个,推倒墙的人 祝福与赞颂 生于迟暮 等待奇迹 建管局2006年行政效能总结 哑了心也要歌唱作文1300字 修身养性作文300字 我不是“雷锋”作文600字 提升施工企业财务人员“管理会计”职能的思考 感恩妈妈作文600字 八荣八耻心得体会——学生思想汇报_入党思想汇报 《边城》公开课课堂实录及其教研组评价

Copyright © 2016 phpStudy |