the*_*art 7 php polymorphism require include require-once
我的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是不可取的,因为即使只需要一个或另一个,也需要包含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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,在第二个例子中,即使使用了require_once风格,多次调用Create()也会因为调用范围而导致多个需求.
这是真的?在这样的示例中,在php中动态包含库的最佳方法是什么?
谢谢!
Autoload设施通常被视为邪恶,但它很适合这些任务.
如果你可以得到一个好的文件系统< - > classname映射,那么你可以在给定一个提供的类时找到它,那么它将节省你的开销,只在需要时加载类.
它也适用于静态类,因此一旦静态类在范围内,它甚至不需要调用require的"is yet included yet"测试,因为Class已经在符号表中.
然后你就可以创建了
require("autoloader.php");
$x = new Car();
$x = new Bike();
Run Code Online (Sandbox Code Playgroud)
并且它会在需要时将它们带入.
有关详细信息,请参阅Php.net/__autoload.