我在这里使用PHP,我有两个类。我可以在另一个类中调用一个类的函数吗?例如:B类A类呼叫功能
class A { function a_func() { echo "A function"; } } $a = new A(); class B { function b_func() { $a->a_func(); // This is the thing I'm stuck with. } }
我希望我在这里说清楚。我看了Google,但我不知道这是什么,所以我什么也没有提出。谢谢你的帮助。
我在这里使用PHP,我有两个类。我可以在另一个类中调用一个类的函数吗?例如:B类A类呼叫功能
class A { function a_func() { echo "A function"; } } $a = new A(); class B { function b_func() { $a->a_func(); // This is the thing I'm stuck with. } }
我希望我在这里说清楚。我看了Google,但我不知道这是什么,所以我什么也没有提出。谢谢你的帮助。
你有2个解决方法: 1)如果你的a_func不需要一个实例(好像是这种情况),哟ü可以使函数静态和从第二类
class A
{
public static function a_func()
{
echo "A function";
}
}
class B
{
function b_func()
{
A::a_func();
}
}
2)1)如果您需要a_func一个实例,你不得不创建一个叫它:
class A
{
public function a_func()
{
echo "A function";
}
}
class B
{
function b_func()
{
$a = new A;
$a->a_func();
}
}
你可以,如果你制作$a
本地b_func()
。
无论是
声明它global $a;
内b_func()
(可能不是一个好主意,取决于你的使用情况)
传递$a
作为参数传递给b_func()
:
function b_func($a)
....
制作$a
的成员:
$b = new B();
$b->a = new a(); // Can be accessed by `b_func()` as `$this->a`#
或初始化$a
内b_func()
:
function b_func()
{
$a = new A();
这是最好的在你的场景将依赖新生什么A和B做的,什么关系他们。
感谢这Pekka。我应该在我原来的问题中说过这个,但原来的'$ a'将会保存我需要获取值的变量。我不想创建另一个空白类,但在类型为“$ a”的第一个对象中调用一个函数,该函数将获得我之前设置的值。我有道理吗? – Bojangles 2011-05-01 15:35:58
你可以叫a_func()如果实例A类第一:
class B
{
function b_funct()
{
$a = new A(); //create instance of A
$a->a_func(); //run function
}
}
一个替代方案是让a_func静:
static function a_funct()
,并称呼其为:
A::a_function();
还不错的答案,所以远。别人还没有提到一件事......
如果B
需要对象A
正常工作,你应该通过一个进入构造和使用object composition:
class B {
protected $a;
public function __construct(A $a) {
$this->a = $a;
}
public function b_func() {
$this->a->a_func();
}
}
$a = new A;
$b = new B($a);
$b->b_func();
你会看到,我已经在类B
保护 财产。这是encapsulation,绝对是你应该阅读的东西。
您应该阅读的另一个重要的主题是dependency injection。
我不得不承认我对PHP类很新。如果我采用这种方法,我是否可以访问我之前设置的类A的第一个实例的变量(通过代理函数)。我问原始问题的原因是因为我有两个对象,我想从一个中获取数据,并在另一个中使用它。 – Bojangles 2011-05-01 15:39:45
我已经实现了第一个解决方案,并且我提出了这个错误:'在envars.php中的对象上下文中不使用$ this,使用'echo A :: a_func(“argument”)行时;'。这里出了什么问题?我将这些函数改为'public static',但仍然是相同的错误。有任何想法吗? – Bojangles 2011-05-01 15:57:32
我还应该补充说明的是:$ this-> vars [$ var]'。我真的迷失在这里,所以更多的帮助将不胜感激。 – Bojangles 2011-05-01 16:13:47