0

我有整个项目的大师班。我需要将主类函数调用到不同的页面和方法,如下所述:

大师.php

class master{

    function login_parser(){

    }
}

索引.php

include('master.php')

function test(){
    $obj = new master();
}

function test2(){
    obj = new master();
}

我需要为每个方法调用对象。有没有办法一次性调用一个对象?

4

3 回答 3

2

You could give that object as a parameter to the function, so it's also clear that there is a dependency to this object which can also be typehinted (which gets lost if just using it via global)

$obj = new master();

function test(master $obj) {
  ...
}

and then call:

test($obj);
于 2013-05-09T14:44:56.153 回答
1

有很多方法可以实现这一点

Tobias Zander 给出了参数的选项(依赖注入)

优点:知道函数需要什么

缺点:最终可能会给函数提供很多参数

$obj = new master();

function test(master $obj) {
  ...
}

第二种方法可能是使用全局变量

优点:没有参数链

缺点:不知道函数有什么依赖关系

$obj = new master();

function test(){
    global $obj; //Now carry on
}

第三种方式,单例

优点:面向对象的方式

缺点:不知道依赖关系

在这个你的大师班需要一个返回自身的静态函数

class Master
    {
    protected static $master ;

    public static function load()
    {
        if(!self::$master instanceof Master) {
            self::$master = new Master();
        }

        return self::$master;
    }
}

现在我可以使用加载功能在我的脚本中的每个地方使用主控,它只会启动一次

function test()
{
    $master = Master::load();
}

我个人使用方法 1,但对于一个类 class Test { protected $master;

    public function __construct(Master $master) 
    {
        $this->master = $master;
    }

    public function whoo()
    {
        // now I can use $this->master as the master class
    }
}
于 2013-05-14T12:23:45.747 回答
0

Yes, Instead of creating object everytime. Create on outside the functions on global scope.

include('master.php')
$obj = new master();

function test(){
    global $obj; //Now carry on
}

function test2(){
    global $obj;
}
于 2013-05-09T10:43:10.137 回答