最佳实践在函数/类中使用全局变量或通过引用函数传递变量?

时间:2016-12-23 15:15:07

标签: php global-variables pass-by-reference

PHP 5.6+的最佳做法是什么? 什么是更节省的方法?与资源/记忆/速度有关。

通过引用函数传递变量。我不需要修改变量:

$bigClass = new MyBigClass();

class MyClass extends AnotherClass
{
    protected $obj;

    function __construct(\namespace\interface &$obj) {
        $this->obj =& $obj;
    }

    public function function1() {
        $this->obj->doThings();
    }

    private function function2() {
        $this->obj->otherThings();
    }

    public function function3() {
        // and so on ...
    }
}

$my_class = new MyClass($bigClass);
// $my_class->...

或者我应该使用全局关键字的方式:

$bigClass = new MyBigClass();

class MyClass extends AnotherClass
{
    function __construct() { }

    public function function1() {
        global $bigClass;
        $bigClass->doThings();
    }

    private function function2() {
        global $bigClass;
        $bigClass->otherThings();
    }

    public function function3() {
        // and so on ...
    }
}

$my_class = new MyClass();
// $my_class->...

哪种方法消耗的资源最多而且速度慢?

或者无话可说?

由于

1 个答案:

答案 0 :(得分:1)

对象已通过引用传递。这是一个测试脚本,向您展示:

<?php

class MyClass {
    public $value;
}

function test(MyClass $test) {
    $test->value = 2;
}

$class = new MyClass;
$class->value = 5;
test($class);

echo $class->value; // echoes 2

一般来说,除非你有一个庞大的变量,否则我认为在处理引用时你不应该担心性能。如果您真正经营一个接近Facebook,亚马逊或谷歌的网站,您可能会看到这些微优化带来的好处,但除此之外,这将浪费时间。