php函数内不能访问函数外的变量原因

摘要:
执行以下代码的原因是无法在PHP函数中访问函数外部的变量,$i=10;函数my(){echo$i;}my();Xdebug显示未定义变量的问题是无法在函数内部访问外部变量。如果您想访问它们,如上所述,请在函数中添加全局$i。
php函数内不能访问函数外的变量原因
 

执行如下代码,

$i = 10;

function my(){

 echo $i;

 }

my();

xdebug显示是:Undefined variable

这个问题,即函数内部不可以访问外部的变量,如果想访问,如上,则在函数内部加 global $i。

用户在php中定义的变量都可以在一个HashTable中找到,当php中定义一个变量,内核会自动的把它的信息存储到一个用HashTable实现的符号表里,当用户在php中调用一个函数或者类的方法时,内核会创建一个新的符号表并激活之,这也是为什么我们无法在函数中使用函数外定义的变量的原因(因为他们分属两个符号表,一个当前作用域,一个全局作用域的),如果不是在一个函数里,则全局作用域的符号表处于激活状态。

免责声明:文章转载自《php函数内不能访问函数外的变量原因》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【原】iOS学习之Quartz2D(1)K8s部署下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[GXYCTF2019]BabysqliV3.0题解

[GXYCTF2019]BabysqliV3.0 常规分析 题目叫babysqli,刚访问的时候会有一个登录页面,于是我用测了测sql注入,毫无收获。 最后发现是弱口令,账号admin,密码password。 登录进去以后是这样的: url末尾是file=的形式,怀疑是文件包含,并且自动在xxx后面加.php。 将file=后面的参数改为php://fi...

Laravel之队列

一.配置 队列配置文件存放在config/queue.php 。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis 以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动以拒绝队列任务。 默认是sync,即同步的,直接处理,无队列.要将其修改为对应的类型,如...

10个超级有用、必须收藏的PHP代码样例

作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用它开发过大型软件项目,也一定多少了解它的语法。 尽管PHP经常被人诟病,被人贬低,被人当玩笑开,事实证明,PHP是全世界网站开发中使用率最高的编程语言。PHP最大的缺点是太简单,语法不严谨,框架体系很弱,但这也是它最大...

PHP将秒数转换成时分秒

/** * 将秒数转换成时分秒 * * @param 秒数 $seconds * @return void */ function changeTimeType($seconds) { if ($seconds > 3600) { $hours = intval($seconds / 3600); $...

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel 1、MySQL安装【安装 MariaDB】MariaDB是MySQL的一个分支首先,更新升级系统$ sudo apt update$ sudo apt upgrade安装MariaDB:$ sudo apt install mariadb...

c/c++中变量的作用域

作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 (1) 全局变量:    全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响...