【发布时间】:2016-03-31 23:19:06
【问题描述】:
我想通过 Start.php 作为参数在 B 类中调用 A 类的静态函数,但不将 ClassA.php 包含到 ClassB.php 中。
我想这样做的原因是因为我有一些特定于客户端的逻辑,我想分离并集中调用,并且仅在我真正需要它时(index.php)而不将其包含在其他文件中。
假设我有 3 个文件。
Start.php, ClassA.php, ClassB.php
ClassA.php
class A {
public static function foo($param) {
// do some special logic
// and return either true or false
}
}
ClassB.php
class B {
function bar($var, $func) {
foreach($var as $v) {
if($func($var)) {
echo 'OK';
}
}
}
}
开始.php
require_once('ClassA.php');
require_once('ClassB.php');
class Start() {
function init() {
$b = new B();
$test = array(1,2,3,4,5);
$b->bar($test, ['A', 'foo']);
}
}
Start::init();
所以,Start 取决于 ClassA 和 ClassB,没关系。
但我不希望 ClassB 依赖于 ClassA。
当我这样做时,我收到错误,说找不到 A 类。
这可能吗?这甚至被认为是一种好的做法吗?
【问题讨论】:
-
"但我不希望 ClassB 依赖于 ClassA。"但是如果你在 ClassB 中使用 ClassA,ClassB 依赖于 ClassA。
-
使用自动加载,您可以按需加载类。
-
也许你可以使用接口来实现。
-
有趣...我刚刚复制粘贴了您的代码(仅将
class Start(){}更改为class Start{}),一切正常。我使用 php 5.4.45
标签: php function static dependencies code-injection