PHP的类支持
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:4285248个文字广告月20元广告联系QQ:428524广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:428524广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关Php编程→PHP的类支持

PHP的类支持
PHP的类支持

如果你使用过一门健全的OOB语言,例如C++或者Java

那么当你使用PHP编写类的时候——毫不夸张地说,你会有种挠墙的冲动

虽然到了PHP 5.x的时候,OOB已经基本上被支持了——数据抽象、继承、多态

但是还是有一些小细节,让你痛苦……

 

对于我来说,首当其冲的是构造函数的重载,一般一个类必需一个默认构造函数,建议包括一个拷贝构造函数,还可能需要多个拥有不同形参列表和返回值的构造函数。

这个小问题在PHP里的实现就异常痛苦,作为一个支持默认参数的弱类型语言,你根本无法依靠函数签名来区分不同的调用(好在新的PHP版本对形参类型进行了支持)

虽然可以通过让唯一的__construct构造函数内部来处理,但是就必须写成下面的样子:

class Person {

    private$name;

 

    function__construct ($name, $person) {

       if ($name == -1 && $person == -1){

           $this -> name = 'unknow';

        }

        elseif ($person == -1) {

            $this-> name = $name;

        }

       else if ($name == -1) {

            $this-> name = $person -> name;

        }

    }

 

    publicfunction __get ($name) {

       return $this -> $name;

    }

}

这样我们仅在形式上拥有了一个默认构造参数,一个有参构造函数和一个拷贝构造函数。

 

另外如果你想通过子类的一个实例调用一个被子类重载的基类方法的时候,你会非常痛苦。

例如 Class B extengs A

且A::writeBack ();在B中被B::writeBack ();重载

而当你

b = new B;

想通过b调用A::writeBack ();几乎是不可能完成的,除非你在B类的方法成员冲添加一个方法

public function writeBackA () {

   parent::writeBack ();

}

之后调用b -> writeBackA ();来实现对A::writeBack ();调用

或者使用类似构造函数的方式,通过增加更多的参数和参数处理来达到上述目的

如果从上面B extends A的两个类的继承还好,但是当几个类有着纵向继承关系的时候

这种调用方法就让人发指了

同样这也是由于PHP的弱类型性造成的,而且所有相关的类型变换函数无法处理一个类

例如(A) b时不被接受的,同样settype (b, "A");也是不被接受的

 

弱类型带来的便利现在多少成了让PHP程序员在走向OOB的痛苦的小东西

所属分类:编程相关Php编程    作者:新浪博客    时间:2010-11-20 0:00:00

文章导航