我的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中动态包含库的最佳方法是什么?
谢谢!
Autoload设施通常被视为邪恶,但它很适合这些任务.
如果你可以得到一个好的文件系统< - > classname映射,那么你可以在给定一个提供的类时找到它,那么它将节省你的开销,只在需要时加载类.
它也适用于静态类,因此一旦静态类在范围内,它甚至不需要调用require的"is yet included yet"测试,因为Class已经在符号表中.
然后你就可以创建了
require("autoloader.php"); $x = new Car(); $x = new Bike();
并且它会在需要时将它们带入.
有关详细信息,请参阅Php.net/__autoload.