2009年07月13日

PHP低耦合,高可扩展性应用的解决方案

Filed under: PHP » 实践经验 — 标签:, — cmpan @ 2009-07-13 22:26:33

PHP低耦合,高可扩展性应用的解决方案
(先把例子写下来,有时间再完善文字)
一个不能完美解决的方案:
在不同的文件中定义类名相同的类,根据需要包含不同的文件


// 定义在 cls/A.php
class A {
    public static function go() {
        return 'i m cls/A.php';
    }
}

// 定义在 my/A.php
class A {
    public static function go() {
        return 'i m my/A.php';
    }
}

$clsf = 'my/A.php'; // 现在要调用的是my/A.php
require_once $clsf;

$cls = new A();
$cls->go();
A::go();

缺点:
文件cls/A.php的类A不能被my/A.php的类A继承(当然反过来也一样)

第二种解决方案:
统一接口,static/const 类型在抽象类中定义,通过变量函数来创建不同的类的实例


interface I {
    public function test();
}

abstract class A {
    public static $my = array('a', 'b');

    public static function go() {
        return 'i m public static A::go()';
    }
}

class My extends A implements I {
    public function test() {
        return 'im public My::test()';
    }
}

class My2 extends My {
    public function test() {
        return 'im public My2::test()';
    }
}

$cls = 'My';  // 我调用的是类My
$obj = new $cls();
$obj->test();

$cls = 'My2';  // 我调用的是类My2
$obj = new $cls();
$obj->test();

// 访问静态方法
A::go();

第二种解决方案的问题:
static方法无法在自定义的类中修改并让程序访问到该方法的地方也访问自定义的方法。

解决办法:同时使用以上两种方案

Views – 2222

分享到:
Copyright © 2009 流水孟春 版权所有
Web技术,LAMP,Nginx,Web2.0,前端技术
Powered by WordPress & UI Designed by 流水孟春