频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛

PHP面向对象、类经典教程[1]

来源:www.phpres.com 作者:Angelover 出处:www.phpres.com 2007-9-21 16:40:24 进入讨论组
关 键 词: 教程 经典 对象 面向 echo 方法 protected public this

这是一篇很详细的介绍PHP面向对象的教程,转载下载希望对你和你的朋友学习PHP有所帮助!谢谢您对本站的支持!:)

    由于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();
?> 
第19章 类与对象(PHP5)之二:范围解析操作符(::)--Scope Resolution Operator (::)

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。把 Paamayim Nekudotayim 选作该操作符的名字似乎有些奇怪。然而,这是Zend开发小组在写Zend Engine 0.5(被用于 PHP 3 中)时所作出的决定。事实上这个词在希伯莱文就是双冒号的意思。

例 10.11. 在类的外部使用 :: 操作符
<?php
class MyClass 
{   const CONST_VALUE 'A constant value';
}
echo 
MyClass::CONST_VALUE;
?> 
self和parent这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。

例 10.12. :: from inside the class definition
<?php
class OtherClass extends MyClass
{   public static $my_static 'static var';
    public static function 
doubleColon() 
    {   echo 
parent::CONST_VALUE "\n";
       echo 
self::$my_static "\n";
   }
}
OtherClass::doubleColon();
?> 

当一个子类覆盖其父类中的方法时,PHP不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止。这种机制也作用于构造函数和析构函数、重载及魔术函数。

欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱