如何启动PHP类并在多个文件中使用它?

Jas*_*vis 2 php oop class

我现在很难过.在我关于这个问题的上一篇文章中,答案是使用单例来确保一个对象只启动一次,但我遇到了相反的问题.

如果我有一个名为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';
?>
Run Code Online (Sandbox Code Playgroud)

然后在所有4个测试文件中,我将尝试从会话类访问一个名为get()的方法,假设会话类文件已经包含在index.php页面中.

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

$testvar = $session->get($var1);
Run Code Online (Sandbox Code Playgroud)

在任何测试类文件中,我都会收到此错误

Fatal error: Call to a member function get() on a non-object
Run Code Online (Sandbox Code Playgroud)

代码在没有错误的情况下工作的唯一方法是使用

$session = new Session(); 
Run Code Online (Sandbox Code Playgroud)

在每个文件中.

如何在index.php文件中初始化时,如何修复/避免必须在每个文件中初始化该类?

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

Zak*_*Zak 5

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

编辑:所以发布您的来源,以便我们可以停止推测

1)您包含的文件是类文件.换句话说,它们包含如下内容:

class a
{
    function a(){}

    function b()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

2)您不是在加载时尝试在类文件中执行代码,而是稍后通过实例化它们来执行代码

require("class.a.php");

$myA = new a();

$a->b();
Run Code Online (Sandbox Code Playgroud)

如果您尝试在这些类中引用会话变量,那么您会遇到范围问题.在类定义之外声明的变量不能在类中使用,除非它在类中声明为全局变量.

class a
{
    function a(){}

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

    function b()
    {
        global $session;
        $session->doSomething(); //succeeds
    }
}
Run Code Online (Sandbox Code Playgroud)

即便如此,您可能不希望这样做,但是如果类需要访问它,您应该将会话作为变量传递:

class a
{
    function a(){}

    function b($session)
    {
        $session->doSomething(); // yay!
    }
}
Run Code Online (Sandbox Code Playgroud)