我怎么能启动一个PHP类,并在几个文件中使用它?(How can I initiate a PHP

2019-07-19 01:49发布

我现在很为难。 在我关于这个问题的最后一个职位的答案是使用一个单,以确保一个对象仅启动1次,但我有相反的问题。

如果我有一个名为index.php文件,然后我有这些文件进去,class1.php,class2.php,class3.php,class4.php。

在我的index.php都会有,

<?PHP
$session = new Session();  

require_once '/includes/class1php';
require_once '/includes/class2.php';
require_once '/includes/class3.php';
require_once '/includes/class4.php';
?>

然后在测试文件,我会尝试从会话类访问的方法名为get(),假设会话类文件的所有4个已纳入index.php页面为好。

现在,如果我尝试使用...

$testvar = $session->get($var1);

在任何测试类的文件,我会得到这个错误

Fatal error: Call to a member function get() on a non-object

代码工作没有错误的唯一方法是,如果我使用

$session = new Session(); 

在每一个文件。

如何解决/避免必须initaite在每一个文件中的类时,它在index.php文件已经initated?

我们的目标是让我启动类1个文件一样的index.php然后包含类文件到该页面,美中不足的是大多数类使用其他类的方法,以便将是很好,如果我没有启动在每一个文件中的每一类

Answer 1:

如果没有看到代码,这很难说,但我想我可以做一些假设。 如我错了请纠正我:

编辑:因此,发布您的源,以便我们可以停止猜测

1)要包括的文件类文件。 换句话说,它们含有类似:

class a
{
    function a(){}

    function b()
    {

    }
}

2)你是不是想在类文件执行代码,在加载时,但在一段时间后通过初始化它们

require("class.a.php");

$myA = new a();

$a->b();

如果你想引用这些类中的会话变量,那么你有一个范围的问题。 一个类定义之外声明的变量不能在类内使用,除非它被声明为类中的全局变量。

class a
{
    function a(){}

    function willFail()
    {
        $session->doSomething(); //fails
    }    

    function b()
    {
        global $session;
        $session->doSomething(); //succeeds
    }
}

即使是这样,你可能不希望这样做,而是你应该在你的会话传递作为一个变量,如果类需要访问它:

class a
{
    function a(){}

    function b($session)
    {
        $session->doSomething(); // yay!
    }
}


Answer 2:

你可以有一个基类,它们都全部来自延伸

class test1 extends Base {

    public function doSomething() {
        $this->session->get('something'); 
    }    

}

class Base {

    protected session;

    public function __construct() {
        $this->session = new Session();
    }

}


Answer 3:

你有种想它倒退。 将使用会话对象的任何文件将需要包括含有类定义的文件。 另一种方法是使用__autoload拉在类:

function __autoload($classname)
{
  if ($classname == 'Session')
  {
    include_once 'Session.php';
  }
}

编辑:你需要把包含自动加载该文件到每个将使用它的文件。



文章来源: How can I initiate a PHP class and use it in several files?
标签: php oop class