Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8597
  • 博文数量: 2
  • 博客积分: 201
  • 博客等级: 入伍新兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-18 09:02
文章分类

全部博文(2)

文章存档

2008年(2)

我的朋友
最近访客

分类:

2008-04-04 16:20:17

类与对象(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();
?>


阅读(374) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux 技巧:使用 screen 管理你的远程会话

给主人留下些什么吧!~~