当前位置:  开发笔记 > 编程语言 > 正文

使用静态工厂模式时,包含PHP库的最佳方法是什么?

如何解决《使用静态工厂模式时,包含PHP库的最佳方法是什么?》经验,为你挑选了1个好方法。

我的PHP库中有几个静态工厂模式.但是,内存占用空间不大,我们希望减少执行期间所需的文件数量.以下是我们今天的例子:

require_once('Car.php');
require_once('Truck.php');

abstract class Auto
{
    // ... some stuff ...

    public static function Create($type)
    {
        switch ($type) {
            case 'Truck':
                return new Truck();
                break;
            case 'Car':
            default:
                return new Car();
                break;
        }
    }
}

这是不可取的,因为即使只需要一个或另一个,也需要包含Car.php和Truck.php.据我所知,require/include和他们的......一旦变化包括与调用相同范围的库.这是真的?

如果是这样,我相信这会导致内存泄漏:

    abstract class Auto
    {
        // ... some stuff ...

        public static function Create($type)
        {
            switch ($type) {
                case 'Truck':
                    require_once('Truck.php');
                    return new Truck();
                    break;
                case 'Car':
                default:
                    require_once('Car.php');
                    return new Car();
                    break;
            }
        }
    }

在我看来,在第二个例子中,即使使用了require_once风格,多次调用Create()也会因为调用范围而导致多个需求.

这是真的?在这样的示例中,在php中动态包含库的最佳方法是什么?

谢谢!



1> Kent Fredric..:

Autoload设施通常被视为邪恶,但它很适合这些任务.

如果你可以得到一个好的文件系统< - > classname映射,那么你可以在给定一个提供的类时找到它,那么它将节省你的开销,只在需要时加载类.

它也适用于静态类,因此一旦静态类在范围内,它甚至不需要调用require的"is yet included yet"测试,因为Class已经在符号表中.

然后你就可以创建了

require("autoloader.php"); 
$x = new Car();  
$x = new Bike(); 

并且它会在需要时将它们带入.

有关详细信息,请参阅Php.net/__autoload.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有