在PHP中,我希望导入2个具有相同名称的第三方类.例如:
// in file libs/3rdparty/AppleTree/Apple.php
class Apple extends SomeOtherModel {
// class details
}
// in file libs/3rdparty/AppleSeed/Apple.php
class Apple extends SomeModel {
// class details
}
Run Code Online (Sandbox Code Playgroud)
鉴于他们的构造函数是相同的,例如:
$appletree = new Apple();
$appleseed = new Apple();
Run Code Online (Sandbox Code Playgroud)
PHP如何区分这两个类?在Java中,我们可以在构造函数之前附加类路径.
注意:我使用的是PHP 5,我无法修改类,因为它们被其他类文件使用.
小智 3
它不是最漂亮的,也可能不是最有效的,但它确实有效。这个概念是这样的,不是“包含”文件,而是将它们作为字符串读取,将您给它的命名空间包装起来,然后对其进行评估,然后这将允许您使用命名空间调用每个函数......
我需要为algis的代码添加一些疯狂的道具,在这个例子中我调整了它来完成你想做的事情。
function create_namespace($str, $namespace) {
$php_start = 0;
$tag = '<?php';
$endtag = '?>';
$start_pos = $php_start + strlen($tag);
$end_pos = strpos($str, $endtag, $start_pos);
$php_code = substr($str, $start_pos, $end_pos - $start_pos);
if (strtolower(substr($php_code, 0, 3)) == 'php')
$php_code = substr($php_code, 3);
$part1 = "namespace $namespace ;";
ob_start();
eval($part1 . $php_code);
ob_end_clean();
}
$str1 = file_get_contents('apple1.php');
$str2 = file_get_contents('apple2.php');
create_namespace($str1, "red");
create_namespace($str2, "green");
$apple1=new red\apple();
$apple2=new green\apple();
echo $apple1->color();
echo "<br/>";
echo $apple2->color();
Run Code Online (Sandbox Code Playgroud)
输出:
red
green
Run Code Online (Sandbox Code Playgroud)