PHP无法找到类文件

时间:2011-10-25 13:44:27

标签: php templates

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的更新版本?

3 个答案:

答案 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
}