在PHP中使用关键字和New关键字

时间:2017-06-22 09:36:20

标签: php

通过“use”关键字访问类或将其声明为“new”加上类的文件路径有什么区别?

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

//if accessed using use keyword
use App\Entity\User;

class SampleController extends Controller 
{
    public function add(Request $request) 
    {
       //if declared by "use" keyword above
       $user = new User();

       //if not declared by "use" keyword

       $user = new \App\Entity\User();
    }
}

如果我要使用User类的函数,结果是相同的,但它们的声明有什么不同?

2 个答案:

答案 0 :(得分:2)

没有区别。使用UserControl不包含任何内容。它只是将指定的命名空间(或类)导入当前范围

public UserControl() { InitializeComponent(); this.Loaded += (s, e) => { _users = DataContext as ObservableCollection<UserControlModel>; }; } ItemsSource

相同

您可以找到更多详情How does the keyword "use" work in PHP and can I import classes with it?

答案 1 :(得分:2)

use关键字为类或命名空间生成别名。

as关键字引入了别名。如果没有as,别名是命名空间或类路径的最后一个组件:

use App\Entity\User as OneUser;

OneUser\App\Entity\User相同,可以在当前文件中的任何位置使用它代替它。

use App\Entity\User;

别名为UserApp\Entity\User的最后一个组成部分)。它与(但短于)相同:

use App\Entity\User as User;

别名用于少写;代码更容易以这种方式阅读。

别名在编译时处理,它们仅在创建它们的文件中可见。仅仅存在use声明没有任何效果;它只为类或命名空间创建一个较短的名称,但这个较短的名称仅在编译包含它的文件时才有效。

别名类名称不会在字符串内扩展。在编译期间,它们只是文本。在运行时期间,'User''App\Entity\User'不同。

因此,class_exists('User')会返回FALSE,但class_exists('App\Entity\User')会返回TRUE

有关PHP如何解析别名的更多见解,请阅读"Using namespaces: Basics"文档页面。