Normaly我会在创建对象之前包含我的类文件。我的问题是如何只在我的主文件中包含一个类文件,然后在另一个类中使用它?这是我的代码:
主文件:
require_once("class.a.php");
require_once("class.b.php");
var $a;
function main () {
$a = new class.a();
$b = new class.b();
}
b级:
class b {
var $a;
function __construct() {
$this->a = class.a::method();
}
}
这似乎适用于一些较旧的PHP版本,但它在一些新的PHP版本中找不到错误文件class.a.php。
编辑:我已经纠正了我的问题:class.b使用对class.a方法的直接调用。这给了我一个错误class.a.php找不到。当我向class.b.php添加require_once(“class.a.php”)时,我可以修复此错误:
require_once("class.a.php");
class b {
var $a;
function _constructor() {
$this->a = class.a::method();
}
}
但是后来我有两个包含,这也不适用于php的更新版本?
答案 0 :(得分:3)
好吧,new class.a()
应该创建语法错误,因为.
除了字符串连接之外的任何地方都不是有效的运算符。你想要
class a {
// do something
}
$a = new a();
对于require_once
,一旦你在PHP脚本中包含或需要一个文件,所有的类/函数/变量/常量/等等。将继续保留在之后包含的所有其他文件。所以你的问题显然是语法问题。
此外,您可能需要考虑修改以下内容:
var $a;
已过时,应为public $a
(或受保护或私有)。 var
仍然有效,因为它与PHP 4向后兼容,但通常是一个坏主意。__construct
不是_constructor
a::method();
表示“调用类a的静态方法”。你想要像$this->a = new a(); $this->a->method();
答案 1 :(得分:2)
你应该 NOT 在班级名称中加点(.
)。
您可能需要考虑使用autoloader
答案 2 :(得分:1)
更改其他答案中所述的课程名称。将它们设为“a”和“b”。您必须在类b上使用依赖注入。
b {
public $a;
function __construct(a $a) {
$this->a = $a; // now you have the instance of class.a in your class.b
}
}
你的main.php
require_once("class.a.php");
require_once("class.a.php");
function main () {
$a = new a()
$b = new b($a);
$b->a->method(); // call the method of a
}