与直接调用类或在顶部使用类有什么区别?
情况1:
use Carbon\Carbon;
...
public function __construct() {
echo Carbon::now();
}
案例2
public function __construct() {
echo \Carbon\Carbon::now();
}
哪个更好?也许是从成本/加载时间或其他方面?我知道case 1
更加干净,但是我认为两者都有很多优点和缺点。
也许有人已经问过这个问题,但是对不起,我不知道关键字是什么,所以我将在这里询问。谢谢!
答案 0 :(得分:1)
最终操作码会有所不同。第一种情况比第二种情况具有更多的操作码指令。这意味着第一种情况在执行期间将比第二种情况占用更多资源。
但坦率地说,案例1看起来更简洁易读。
这些情况下的操作码如下。
案例1
function name: (null)
L1-12 {main}() /tmp/test/2.php - 0x7fface082140 + 5 ops
L2 #0 NOP
L3 #1 NOP
L5 #2 EXT_STMT
L5 #3 NOP
L12 #4 RETURN<-1> 1
user class: another\App
1 methods: __construct
function name: __construct
L7-10 another\App::__construct() /tmp/test/2.php - 0x7fface0668c0 + 9 ops
L7 #0 EXT_NOP
L9 #1 EXT_STMT
L9 #2 INIT_STATIC_METHOD_CALL "Carbon\\Carbon" "now"
L9 #3 EXT_FCALL_BEGIN
L9 #4 DO_FCALL @0
L9 #5 EXT_FCALL_END
L9 #6 ECHO @0
L10 #7 EXT_STMT
L10 #8 RETURN<-1> null
案例2
function name: (null)
L1-11 {main}() /tmp/test/1.php - 0x7f2e3c493000 + 4 ops
L2 #0 NOP
L4 #1 EXT_STMT
L4 #2 NOP
L11 #3 RETURN<-1> 1
user class: another\App
1 methods: __construct
function name: __construct
L6-9 another\App::__construct() /tmp/test/1.php - 0x7f2e3c466780 + 9 ops
L6 #0 EXT_NOP
L8 #1 EXT_STMT
L8 #2 INIT_STATIC_METHOD_CALL "Carbon\\Carbon" "now"
L8 #3 EXT_FCALL_BEGIN
L8 #4 DO_FCALL @0
L8 #5 EXT_FCALL_END
L8 #6 ECHO @0
L9 #7 EXT_STMT
L9 #8 RETURN<-1> null
答案 1 :(得分:-1)
这是我的主意。
use Carbon\Carbon;
...
public function __construct() {
echo Carbon::now();
}
在上面的示例中,构造函数是tightly coupled,类为Carbon\Carbon
。在这种情况下,很难扩展该类。
类似地,在情况2中,类Carbon\Carbon
也与构造函数紧密耦合。
但是,还有第三种情况。在这种情况下,您需要将类Carbon\Carbon
注入到名为dependency injection的构造函数中。与前两种方法相比,这是更可靠和推荐的方法,因为在这种情况下,该类不再与类Carbon\Carbon
紧密结合。这是上面的示例在这种情况下的样子,
public function __construct(\Carbon\Carbon $carbon) {
echo $carbon::now();
}