PHP面向对象高级特性初探
2013-12-08 00:00
681 查看
摘要: PHP5引入大量的面向对象的特性,也使得PHP更加方便实用。最近开始深入了解PHP的OOP特性,记录简单的学习心得。
<?php //实例作为函数参数传递时,在实例变量前加上类名做类型说明,因为类是一个类也是一个类型 class DomainObject() { private $cjp; public function getCjp() { return $this->cjp; } } class otherObject() { function __construct(DomainObject $aObject) { $object = $aObject; } } //静态方法 static 类访问属性 //静态方法 static function 可以访问静态属性,不能访问一般属性 //不能用$this伪变量访问静态方法,可以通过self或者直接类名:: class StaticExample { static public $sNum = 0; static public function sayHello() { self::$sNum++; print "hello (".self::$sNum.")\n"; } } //常量属性声明 const ACOUNT //抽象类(abstract class)定义,只定义子类需要的方法,子类继承父类具体化抽象方法 //借口 interface 纯粹的模板,子类需继承借口所有方法,一个子类可以实现任意个借口 //延迟静态绑定:static关键字 //这是在PHP5.3之后引入的。 abstract class DomainObject() { public static function create() { return new self(); } } class Document extends DomainObject { } Document::create(); //运行这段代码,报错:PHP Fatal error: Cannot instantiate abstract class DomainObject in ... //这是因为self被解析定义为create(),self是解析上下文而不是调用上下文; //下面通过静态上下文实用继承关系: abstract class DomainObject() { public static function create() { return new static(); } } class Document extends DomainObject { } print_r(Document::create()); //打印出来的是Document Object //static 不仅仅可以用于实例化,还可以想self和parent一样作为静态方法的调用标识符 abstract class DomainObject() { private $group; public function __construct() { $this->group = static::getGroup(); } public static function create() { return new static(); } static function getGroup() { return "default"; } } //final 终止对象的继承 final class Checkout() { } class secondCheck extends Checkout { } //运行代码报错:...may not inherit form final class... //实用拦截器方法获取信息 class autoAction { function __get($property) { // 访问未定义的属性时被调用 } function __set($property, $value) { // 给未被定义的属性赋值时调用 } function __isset($property) { // 对未定义的属性调用isset()时调用 } function __unset($property) { // 对未定义的属性调用unset()时调用 } function __call($method, $arg_array) { //调用未被定义的方法是调用 } } //__call()方法十分有用!他可以接受两个参数,一个方法名称,一个传递给调用方法的所有参数; //这样,__call()方法可以实现方法委托(相当于继承)和错误处理 class PersonWriter { function writeName( Perons $p ) { print $p->getName(); } function writeAge( Person $p ) { print $p->getAge(); } } class Person() { private $writer; function __construct( PersonWriter $writer ) { $this->write = $writer; } function __call( $methodName, $args ) { if ( method_exists( $this->writer, $methodName ) ) { return $this->writer->$methodName( $this ); } } function getName() { return "cjp"; } function getAge() { return "22"; } } //通过这样调用: $person = new Person( new PersonWriter() ); $person->writeName(); //这样,person神奇的添加了两个方法,相当于继承了PersonWriter。 //委托可以节省很多时间,但代码也会变得不太清晰 // //析构方法__construct(),当对象实例化的时候__construct()自动被执行 //析构方法__destruct(), 在对象被垃圾收集器收集之前被调用,可以做一些清理工作 ?>
相关文章推荐
- 深入PHP面向对象、模式与实践——高级特性(6)
- 深入PHP面向对象、模式与实践——高级特性(5)
- 深入PHP面向对象、模式与实践——高级特性(4)
- PHP面向对象高级特性
- 深入PHP面向对象、模式与实践——高级特性(1)
- 深入PHP面向对象、模式与实践——高级特性(2)
- PHP面向对象深入研究之【高级特性】
- PHP面向对象学习之二:深入了解面向对象高级特性
- 深入PHP面向对象、模式与实践——高级特性(3)
- PHP面向对象高级特性 PSR-0规范
- java面向对象及其特性初探
- PHP面向对象特性-多态
- JS面向对象高级特性
- 面向对象语言概论(三) 基于类的高级特性
- php对象的高级特性
- PHP面向对象的程序设计继承--php高级最详细教程
- PHP对象、模式与实践之高级特性分析
- PHP面向对象的程序设计多态--php高级最详细教程
- Java基础(七)面向对象高级特性
- 09面向对象高级特性二