带构造函数的类在PHP中较慢

时间:2019-01-27 08:24:30

标签: php performance class constructor

我创建了两个类:

class TestClass
{
    public $id;
    public $name;
    public $time;
}

class TestClassCtor
{
    public $id;
    public $name;
    public $time;

    public function __construct()
    {
    }
}

现在我运行一个简单的代码:

$tt = microtime(true);
$data = array();
for ($i = 0; $i < 10000; $i++)
{
    $t = new TestClass();
    $t->id = rand();
    $t->name = rand();
    $t->time = rand();

    $data[] = $t;
}
echo microtime(true) - $tt;
echo "\n";    

$tt = microtime(true);
$data1 = array();
for ($i = 0; $i < 10000; $i++)
{
    $t = new TestClassCtor();
    $t->id = rand();
    $t->name = rand();
    $t->time = rand();

    $data1[] = $t;
}
echo microtime(true) - $tt;

现在,第二个带有TestClassCtor的代码要慢30%左右。为什么? (已通过PHP 5.6和7.1测试)。

编辑:

可以发现类似的区别(在这种情况下,我可以理解-将参数传递给方法可能会更慢)。

class TestClassCtorFill
{
    public $id;
    public $name;
    public $time;

    public function __construct($id, $name, $time)
    {
        $this->id = $id;
        $this->name = $name;
        $this->time = $time;
    }
}

在这种情况下,我可以在一行中创建类

for ($i = 0; $i < 10000; $i++)
{
    $data1[] =  new TestClassCtorFill(rand(), rand(), rand());
}

是的,这样做比较安全,因为用户必须设置所有三个参数,而他不会忘记设置一些东西。

但是,当我在内部框架类中使用此函数时,可以完全省略ctor并直接像TestClass那样设置成员,以节省一些时间。在某些情况下,这不会有太大的区别。但是,如果我创造了它们,那么可能会。

编辑2

我知道函数调用的费用。但是,构造函数是在new上调用的,因此,如果我不编写,则应调用某些构造函数。如果用户没有提供构造函数,则默认为默认构造函数。对象的内存必须以任何一种方式分配。

0 个答案:

没有答案