当前位置:  编程技术>php
本页文章导读:
    ▪PHP 5.0对象模型深度探索之类的静态成员         静态属性包含在类中要封装的数据,可以由所有类的实例共享。实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量。   我们在下例中使用了.........
    ▪PHP 5.0对象模型深度探索之对象复制       默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法)。   克隆的方法可以没有参数,但它同时包含t.........
    ▪PHP 5.0对象模型深度探索之属性和方法       可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 下面的例子中,对象House中的属.........

[1]PHP 5.0对象模型深度探索之类的静态成员
    来源: 互联网  发布时间: 2013-11-30


  静态属性包含在类中要封装的数据,可以由所有类的实例共享。实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量。

  我们在下例中使用了一个静态属性Counter::$count。它属于Counter类,而不属于任何Counter的实例。你不能用this来引用它,但可以用self或其它有效的命名表达。在例子中,getCount方法返回self::$count,而不是Counter::$count。

  静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是否是什么.

  在前文的例子中,getCount是一个普通的方法,用->来调用. PHP建立一个this变量,尽管方法没有使用到.但是,getCount不属于任何对象.在有些情况下,我们甚至希望在不存在有效的对象时调用它,那么就应该使用静态方法. PHP将不在静态方法内部建立this变量,即使你从一个对象中调用它们.

  例子6.7由6.3改变getCount为静态方法而来. Static关键字不能阻止一个实例用->运算符来调用getCount,但PHP将不在方法内部建立this变量.如果你使用this->来调用,将会出错.

//6.3例指第四节--构造函数和析构函数中的例子(参看前文),通过两个例子的比较,你可以很好掌握
//static方法与普通方法之间的区别.

  你可以写一个方法通过判断this是否建立来显示是否它被静态地或者非静态地调用. 当然,如果你用了static 关键字,不管它怎样被调用,这个方法总是静态的.

  你的类也可以定义常量属性,不需要使用public static,只需要用const关键字即可. 常量属性总是静态的.它们是类的属性,而不是实例化该类的对象的属性.

Listing 6.7 Static members
代码如下:

class Counter 

 private static $count = 0; 
 const VERSION = 2.0; 

 function __construct() 
 { 
  self::$count++; 
 } 

 function __destruct() 
 { 
  self::$count--; 
 } 

 static function getCount() 
 { 
  return self::$count; 
 } 
}; 

//创建一个实例,则__construct()将执行 
$c = new Counter(); 

//输出 1 
print(Counter::getCount() . "n"); 

//输出类的版本属性 
print("Version used: " . Counter::VERSION . "n"); 
?>

    
[2]PHP 5.0对象模型深度探索之对象复制
    来源: 互联网  发布时间: 2013-11-30
默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法)。

  克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象)。如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this,如果你用__clone来复制,PHP不会执行任何隐性的复制,下面显示了一个用系列序数来自动化对象的例子:
代码如下:

class ObjectTracker //对象跟踪器 

 private static $nextSerial = 0; 
 private $id; 
 private $name; 

 function __construct($name) //构造函数 
 { 
  $this->name = $name; 
  $this->id = ++self::$nextSerial; 
 } 

 function __clone() //克隆 
 { 
  $this->name = "Clone of $this->name"; 
  $this->id = ++self::$nextSerial; 
 } 

 function getId() //获取id属性的值 
 { 
  return($this->id); 
 } 

 function getName() //获取name属性的值 
 { 
  return($this->name); 
 } 


$ot = new ObjectTracker("Zeev's Object"); 
$ot2 = clone$ot; 

//输出: 1 Zeev's Object 
print($ot->getId() . " " . $ot->getName() . ""); 

//输出: 2 Clone of Zeev's Object 
print($ot2->getId() . " " . $ot2->getName() . ""); 
?>


    
[3]PHP 5.0对象模型深度探索之属性和方法
    来源: 互联网  发布时间: 2013-11-30
可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 下面的例子中,对象House中的属性room包含了一组Room对象。

  访问方法和访问属性类似。->运算符用来指向实例的方法. 在下面的中调用getLastLogin就是。方法执行起来和类外的函数几乎相同.

  如果一个类从另一类中继承而来,父类中的属性和方法将在子类中都有效,即使在子类中没有声明. 像以前提到过的,继承是非常强大的. 如果你想访问一个继承的属性,你只需要像访问基类自己的属性那样引用即可,使用::运算符. 
代码如下:


<?php 
class Room  
{  
 public $name;  

 function __construct($name="unnamed")  
 {  
  $this->name = $name;  
 }  
}  

class House  
{  
 //array of rooms  
 public $room;  
}  

//create empty house  
$home = new house;  

//add some rooms  
$home->room[] = new Room("bedroom");  
$home->room[] = new Room("kitchen");  
$home->room[] = new Room("bathroom");  

//show the first room of the house  
print($home->room[0]->name);  
?> 


  

PHP有两个特殊的命名空间:parent命名空间指向父类,self命名空间指向当前的类。下面的例子中显示了如何用parent命名空间来调用父类中的构造函数. 同时也用self来在构造函数中调用另一个类方法。
代码如下:


<?php 
class Animal //动物  
{  
 public $blood; //热血or冷血属性  
 public $name;  
 public function __construct($blood, $name=NULL)  
 {  
  $this->blood = $blood;  
  if($name)  
  {  
   $this->name = $name;  
  }  
 }  
}  

class Mammal extends Animal //哺乳动物  
{  
 public $furColor; //皮毛颜色  
 public $legs;  

 function __construct($furColor, $legs, $name=NULL)  
 {  
  parent::__construct("warm", $name);  
  $this->furColor = $furColor;  
  $this->legs = $legs;  
 }  
}  

class Dog extends Mammal  
{  
 function __construct($furColor, $name)  
 {  
  parent::__construct($furColor, 4, $name);  

  self::bark();  
 }  

 function bark()  
 {  
  print("$this->name says 'woof!'");  
 }  
}  

$d = new Dog("Black and Tan", "Angus");  
?>  

  对于对象的成员来是这样调用的:如果你需要在运行时确定变量的名称,你可以用$this->$Property这样的表达式。 如果你想调用方法,可以用$obj->$method()。

  你也可以用->运算符来返回一个函数的值,这在PHP以前的版本中是不允许的。例如,你可以写一个像这样的表达式: $obj->getObject()->callMethod()。这样避免了使用一个中间变量,也有助于实现某些设计模式,如Factory模式。

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3