PHP类成员的访问方式和权限

时间:2010-01-12 09:08:38   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:对象类库.像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public. 你也可以为静态成员指明一种访问方式,将访问方式放在static关键字之前(如public static).Public成员可以被毫无限制地访问.类外部的任何代码都可以读写...
  正文:

PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库.

像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public. 你也可以为静态成员指明一种访问方式,将访问方式放在static关键字之前(如public static).

Public成员可以被毫无限制地访问.类外部的任何代码都可以读写public属性. 你可以从脚本的任何地方调用一个public方法. 在PHP的前几个版本中,所有方法和属性都是public, 这让人觉得对象就像是结构精巧的数组.

Private(私有)成员只在类的内部可见. 你不能在一个private属性所在的类方法之外改变或读取它的值. 同样地,只有在同一个类中的方法可以调用一个private方法. 继承的子类也不能访问父类中的private 成员.

要注意,类中的任何成员和类的实例都可以访问private成员. 看例子6.8,equals方法将两个widget进行比较.==运算符比较同一个类的两个对象,但这个例子中每个对象实例都有唯一的ID.equals 方法只比较name和price. 注意equals方法如何访问另一个Widget实例的private属性. Java和C都允许这样的操作.

<?php 
   class Widget 
   { 
       private $name; 
       private $price; 
       private $id; 

       public function __construct($name, $price) 
       { 
           $this->name = $name; 
           $this->price = floatval($price); 
           $this->id = uniqid(); 
       } 
       //checks if two widgets are the same 检查两个widget是否相同 
       public function equals($widget) 
       { 
           return(($this->name == $widget->name)AND 
               ($this->price == $widget->price)); 
       } 
   } 
   $w1 = new Widget('Cog', 5.00); 
   $w2 = new Widget('Cog', 5.00); 
   $w3 = new Widget('Gear', 7.00); 

   //TRUE 
   if($w1->equals($w2)) 
   { 
       print("w1 and w2 are the same
n"); } //FALSE if($w1->equals($w3)) { print("w1 and w3 are the same
n"); } //FALSE, == includes id in comparison if($w1 == $w2) //不等,因为ID不同 { print("w1 and w2 are the same
n"); } ?>

如果你对面向对象编程不熟悉,你可能想知道用private成员的目的是什么. 你可以回忆一下封装和耦合的想法,这在本章开头我们有讨论过. Private成员有助于封装数据. 他们可以隐藏在一个类内部而不被类外部的代码接触到. 同时他们还有助于实现松散的耦合. 如果数据结构外的代码不能直接访问内部属性,那么就不会产生一个隐性的关联性.


来源:http://www.002pc.com/master/College/Programming/PHP/11773.html

收藏到:

关于《PHP类成员的访问方式和权限》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td