首页 > 后端开发 > 正文

use语句必须放在函数外面的理由是什么?

2025-02-02 05:11:49 | 我爱编程网

小编今天整理了一些use语句必须放在函数外面的理由是什么?相关内容,希望能够帮到大家。

本文目录一览:

use语句必须放在函数外面的理由是什么?

use语句必须放在函数外面的理由是什么?

下面为何不可以 `function done() { require_once 'vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\UploadManager; #省略 }` ?

必须写成 `require_once 'vendor/autoload.php';use Qiniu\Auth;use Qiniu\Storage\UploadManager;function done() { #省略 }` ?

语言结构使然,`use` 的作用仅仅是用短名称替代长名称,或者是用别名替代本名,是一个没有语义和实效的“语法糖”。所以消灭 `use` 的运行时开销是一个非常合理的选择。因此 PHP 规定 `use` 在解析阶段(parse)就被处理。

而解析操作本身,非常的单纯,仅仅是从头推到尾,识别一个个的语言关键字,并确保语法规则不被违反。我们可以做一个简单的试验:

我们知道 PHP 解析器不会让我过解析——你说第 5 行永远都不会执行?解析器根本不知道,也不关心。

但对于一个花括号括住的作用域(scope)而言,事情就变得复杂了。因为一个小作用域的执行顺序很可能是乱的——可以回头、可以通过调用来乱跳等等。例如:

php

namespace NS1;

class ClassName { }

function f() { return new ClassName(); }

for ($i=0; $i<2; $i++) {

$a = new ClassName();

$b = f();

use NS2\ClassName;

$c = new ClassName();

}

如果我们认为 `use` 影响它后边的所有内容,那么此时 `$a` 和 `$b` 的赋值语句到底在不在 `use` 的后边?按照语义,第 1 次循环不在,第 2 次循环在,也就是说同一行会产生两种不同的语义。但解析器不可能理解,也不可能维护得了这种逻辑。实现这种逻辑,必然产生一个运行时的开销(因为要介入程序运行当时才能确定的状态),而这是 `use` 的设计本意要避免的。

所以 `use` 只能摆在文件的最外层作用域中。只有这个作用域的范围是一线平推,不可能回退,也不可能出现跳转。

试分析以下 `use` 真正的作用范围,就可以看到逻辑中,处处都是为了方便解析器处理而设计的:

- 从 `use` 出现的行开始(简单的开始规则)

- 见到 `namespace` 结束(简单的终止规则)

- 见到文件尾结束(解析器的运行不能跨文件)

事实上和严谨设计、环环相扣的语言特性不同,很多的语法糖都并没有太多的道理可讲。能像 `use` 这样,从最初的设计目的,从而推导出其设计必然限制的语法糖,其实挺少的。

对于语法糖,死记、活用、理解原理但别想太多,这才是我们作为语言使用者的营生之道。

use语句必须放在函数外面的理由是什么?

php文件不能解析

html文件能访问说明web服务器是正常运行的,这个问题是由于你的apache服务器的脚本解释器没有配置好,

LoadModule "php静态库名.so"

找到

<IfModule alias_module>
#在此标签末尾加上php的路径映射
ScriptAlias /cgi-bin/ "...../Apache Software Foundation/Apache2.2/cgi-bin/"
ScriptAlias /php/ "....../php-5.2.6-Win32/"
</IfModule>

<IfModule mime_module>
#
# TypesConfig points to the file containing the list of mappings from
# filename extension to MIME-type.
#
.
.
.
#在下面加入MIME类型,服务器根据MIME类型来调用想用的脚本解释器

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php

#AddHandler php5-script php, 我这里用的是windows
Action application/x-httpd-php "/php/php-cgi.exe"
</IfModule>

thinkphp系统常量不解析

我爱编程网(https://www.52biancheng.com)小编还为大家带来thinkphp系统常量不解析的相关内容。

1. ThinkPHP常见函数的使用:
a) U 产生URL地址
b) D 实例化Model类,会判断一个类是否存在,不存在直接实例化Model
c) M 直接实例化Model类
d) C 读取或者设置配置文件当中的选项
2. 在ThinkPHP模板当中的模板变量:
a) <{$Think.session}> 读取session,还有get,post等也可以
b) {__CONTENT__} 布局内容的替换
c) <{:U()}> 调用U函数,必须要加:

根据以上TP定义,你可以使用:
用户修改密码
首先在模版中修改密码的位置将超链接的地址写成下面这个
<{:U('User/modpass')}> 我爱编程网

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“use语句必须放在函数外面的理由是什么?”相关推荐
在PHP页面的顶端增加语句ob_start();的作用是什么
在PHP页面的顶端增加语句ob_start();的作用是什么

在PHP页面的顶端增加语句ob_start();的作用是什么您好,ob_start();....ob_clean();这两句中间的任意输出,都可以用ob_get_contents();来获取而不输出到浏览器.经典应用:将phpinfo()的信息写到文件里.ob_start();phpinfo();$phpinfo=ob_get_contents();//文件读

2024-09-02 02:41:04
php函数基础问题(PHP构造函数必须命名为 ,而析构函数必须命名为)
php函数基础问题(PHP构造函数必须命名为 ,而析构函数必须命名为)

php函数基础问题1、int,bool是指函数的返回值类型。2、第一个string是参数类型,第二个string是参数名。3、[,int..]表示可选参数,不输入的话则使用默认值,逗号在前边是跟前边的参数隔开。。。PHP构造函数必须命名为,而析构函数必须命名为在PHP编程中,构造函数和析构函数的命名有特定的规则。构造函数必须命名为__construct(),而析构函数则需命名为

2025-02-06 07:38:35
php中为什么setcookie() 函数必须位于 html 标签之前 ?
php中为什么setcookie() 函数必须位于 html 标签之前 ?

php中为什么setcookie()函数必须位于html标签之前?在PHP中使用setcookie()函数时,必须确保它位于HTML标签之前的原因涉及到HTTP协议和浏览器的Cookie处理机制。当服务器向浏览器发送响应时,它会首先发送一系列HTTP头信息,其中包括用于设置Cookie的指令。这些头信息在浏览器接收到响应后立即被解析并执行,以便浏览器能够根据这些信息在本地存储Cookie。

2025-01-04 23:16:42
php文件中用什么语句插入javascript?如果调用外部js文件又用什么语句?
php文件中用什么语句插入javascript?如果调用外部js文件又用什么语句?

PHP声明带有默认值的参数方法,调用时传参问题1、打开HBuilderX工具,新建JavaScript文件并在定义一个函数searchUser,传入三个对象参数,第三个参数及默认值100。2、在函数下面调用这个函数,传入参数为空,查看函数中打印结果。3、由于在HBuilderX工具中不能直接运行JS文件,需要将这个引入到HTML5页面中。4、要在JavaScript文件中

2024-07-25 23:28:37
PHP构造函数必须命名为 ,而析构函数必须命名为 100个最常用的PHP函数(记得收藏哦)
PHP构造函数必须命名为 ,而析构函数必须命名为 100个最常用的PHP函数(记得收藏哦)

PHP构造函数必须命名为,而析构函数必须命名为在PHP编程中,构造函数和析构函数的命名有特定的规则。构造函数必须命名为__construct(),而析构函数则需命名为__destruct()。这种命名约定是为了确保代码的可读性和一致性。在PHP5之前,构造函数的命名与类名相同,例如Person(),这种方式虽然可以实现功能,但在新版本的PHP中,推荐使用__construct()来定义构造函

2025-01-25 17:57:57
我的.java程序放在桌面了,怎么用CMD运行这个啊,本人是菜鸟啊,求高手,另外runtime又是什么...
我的.java程序放在桌面了,怎么用CMD运行这个啊,本人是菜鸟啊,求高手,另外runtime又是什么...

我的.java程序放在桌面了,怎么用CMD运行这个啊,本人是菜鸟啊,求高手,另外runtime又是什么...你好!很高兴为你解答疑惑。首先,你要打开CMD,相信这个你会的。其次,你要理解一个概念,那就是****.java是Java类文件,你要运行Java程序,先要将****.java文件使用编译工具(javac.exe)编译为字节码文件(****.class),然后利用java

2024-04-09 04:32:10
php的输出语句是什么
php的输出语句是什么

php中的几个输出函数1echo();2print();3die();4printf();5sprintf();6print_r();7var_dump();1echo()可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。2print()只可以同时输出一个字符串,一个参数,需要圆括号,有返回值,当其执行失败时返flase.print的用法和C语言很像,所以会对输

2024-07-23 22:03:50
php匿名函数中的use有什么用
php匿名函数中的use有什么用

php匿名函数中的use有什么用php文档中关于use的说明所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。PHP 5.6开始允许导入函数或常量或者为它们设置别名。在PHP中,别名是通过操作符 use 来实现的.  下面是一个使用所有可能的五种导入方式的例子:Example #1 使用use操作符导入/使用别名&lt;?ph

2025-01-01 09:06:45