标题: php_manual学习之翻译:第19章 类与对象(PHP5)(连载)
forest
新手上路
Rank: 1



UID 1217
精华 0
积分 0
帖子 0
阅读权限 10
注册 2007-6-9
发表于 2006-5-4 17:10  资料  个人空间  短消息  加为好友 
php_manual学习之翻译:第19章 类与对象(PHP5)(连载)

原文地址:http://www.phpchina.com/bbs/viewthread.php?tid=4680


php_manual学习之翻译:第19章 类与对象(PHP5)之一:Visibility(访问控制)

    由于php手册从这一章节开始没有翻译,都是英文,近来自己开始学习php5中的面向对象编程,为方便学习和阅读,所以把其翻译之,发上来与大家分享,有不妥之处请大家批评指正!

    申请加精,我花了好长的时间来翻译的东西,呵呵~_~

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


<?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 Priv 
class MyClass2 extends MyClass  //Define MyClass2 
{// 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 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 的面向对象语法中不再使用。为了顾及兼容性,在类中定义一个变量的话,该变量会被自动设为 public,并且产生一个 E_STRICT 警告。
对方法的访问控制
类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
例 10.10. 声明类中的方法


<?php
class MyClass   //Define 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();
class 
MyClass2 extends MyClass    //Define MyClass2
{  // This is public
   
function Foo2()
   {   
$this->MyPublic();
       
$this->MyProtected();
       
$this->MyPrivate();
   }
}
$myclass2 = new MyClass2;
$myclass2->MyPublic();
$myclass2->Foo2();
?> 


[ 本帖最后由 forest 于 2006-5-4 22:06 编辑 ]

顶部
 



当前时区 GMT+8, 现在时间是 2009-1-7 08:25

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - PHP开源项目网 - Archiver - WAP