我创建了两个类:
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
上调用的,因此,如果我不编写,则应调用某些构造函数。如果用户没有提供构造函数,则默认为默认构造函数。对象的内存必须以任何一种方式分配。