Php 实例化类并从不同的类访问方法
我试图在一个类a的函数中使用一个类B函数。但是,B类的很多函数都包含Php 实例化类并从不同的类访问方法,php,oop,class,Php,Oop,Class,我试图在一个类a的函数中使用一个类B函数。但是,B类的很多函数都包含$this,这会导致问题。这两个类(当然每个类都在自己的文件中): 当我运行类A文件时,我得到(…)中未定义的方法类A::person()的调用,因为我认为在实例化类A时,$this值会改变。它否决了类_B值。我怎样才能阻止这一切 还有一个问题:如何从类A中的每个函数访问类B?我不想重新申报班级。我是否需要这样做: class Class_A { function function1() { requir
$this
,这会导致问题。这两个类(当然每个类都在自己的文件中):
当我运行类A文件时,我得到(…)中未定义的方法类A::person()的调用,因为我认为在实例化类A时,$this值会改变。它否决了类_B值。我怎样才能阻止这一切
还有一个问题:如何从类A中的每个函数访问类B?我不想重新申报班级。我是否需要这样做:
class Class_A
{
function function1()
{
require('class_b.php');
$class_b = new Class_B();
// code
}
function function2()
{
require('class_b.php');
$class_b = new Class_B();
// code
}
}
或者我需要使用构造函数还是什么?不要将require
放在方法中。include
d文件中的代码继承了包含它的位置的范围,在您的示例中,坏事情会发生。此外,对于类定义脚本,请考虑<代码>要求>曾经/<代码>,而不是<代码>要求< /C> >,以避免多个定义。
根据经验,将所有include
s和require
s放在脚本顶部。更好的是,设置一个类自动加载程序,并将其注册到auto\u prepend
脚本中。这样,您就不必手动包含任何内容(至少不必为类定义包含任何内容)。您可能需要的是依赖项注入,即将类B
的对象传递到类A
的构造函数中,并将其作为属性保存在类A
中。然后,它在Class_A
中作为$this->Class b
或类似文件提供
// Include Class_B code outside the class.
require_once('class_b.php');
class Class_A {
// Property to hold Class_B
public $b;
// Constructor
public function __construct($b) {
$this->b = $b;
}
public function function1(){
// code
$this->b;
}
public function function2(){
// code
$this->b;
}
}
// Now call your objects:
// The Class_B which will be injected into A
$b = new Class_B();
// Your Class_A, which holds an instance of Class_B as a property
$a = new A($b);
通过Class_B::person()
可以静态调用该方法。因此,您应该将person()
方法声明为静态,并且不能使用$this
,因为您没有类B
的实例
如果您需要Class_B
的实例,只需创建它并存储在构建时的Class_B
中即可
class Class_A {
private $b;
function __construct()
{
$this->b = new Class_B();
}
function stuff()
{
$this->b->person();
}
是关于自动加载类的文档。这非常有效。我试图编辑你的帖子以添加最终的}
,但它不允许我!
class Class_A {
private $b;
function __construct()
{
$this->b = new Class_B();
}
function stuff()
{
$this->b->person();
}