在 class 中需要使用到别的 class 的 function ?

我现在遇到一个问题是
假设现在有一个类

class A {
    public function a() {
    }
}
class B {
    public function b() {
    }
}

假设我在 b() 中需要使用到 A的 a()
这通常会是用什么方式做到呢?我看网上似乎有几种方式,不晓得哪个是好的
再来如果类得顺序会不会影响到使用?
如果反过来呢? a() 需要用 b() 时?


我現在的做法是在外面先 new 一個
在用 global 帶到 function 裡面用

阅读 3.3k
4 个回答

如果 B:A 类存在上下级关系就直接用 extend 进行 继承

如果 A 类会在多个地方用到,可以抽出来做成 Trait ,在需要使用时 use

如果以上两个条件都不满足。

  • 那就可以用直接在 B 的 构造方法 中实例化 A ,赋值给 B 的属性,然后调用。
  • 使用 依赖注入,即在 B 中 把实例化 A 的代码去掉,直接在外部实例化 B 时先实例化 A 然后把在外部实例化的 A 传给 B 的 构造方法,在 B 的构造方法中将传进来的 A 实例赋值给属性。

先加载你要用的类,include或者composer。
$obj = new A();
$obj->a();

反之同理。

最好的方式是用命名空间导入,防止类名重复。
自动载入->use->new namespace/A()

现在一般都用依赖注入,用容器进行类管理,反射来进行注入。可以参考下symfony。好处可以百度一下,很多。不过在设计的时候需要注意环形调用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题