PHP,一个奇怪的变量范围?

2023-12-06

这更多的是一个关于“为什么”然后“如何做”的问题,但它已经困扰我好几天了。目前,我正在使用 CodeIgniter 进行一些工作,并暂时从 Ruby 返回到 PHP,这让我对以下作用域魔法感到困扰。

<?php $query = $this->db->get('articles', 2);
        if ($query->num_rows() > 0)
        {
           foreach ($query->result_array() as $row)
           {
              $data[] = $row; # <-- first appearance here
           }
        return $data; # <--- :S what?!
        } 

正如您所看到的,我并不完全是 PHP 专家,但局部作用域的想法让我感到困扰,因为在 foreach 循环之外变量是“可用的”。所以我在视图中尝试了这个:

<?php

    if($a==1)
    {
    $b = 2;
    }
    echo $b;
?>

这会导致错误消息:

Message: Undefined variable: b

PHP 手册讲述了本地作用域,但我仍然想知道为什么会发生这种情况以及是否有我不知道的特殊规则。这让我害怕:)

感谢您分享想法,


只有函数才能创建新的局部作用域。大括号本身则不然。大括号只是一个辅助构造函数对于其他语言结构(if, while or foreach).

无论您在何处访问本地范围内的任何变量都无关紧要。本地范围是隐式字典幕后(见获取定义变量)。您可能会通过访问以前未定义的变量来获得调试通知,但仅此而已。

在您的具体示例中,您似乎甚至只是在全局范围内操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP,一个奇怪的变量范围? 的相关文章

  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g
  • 很好地阻止了齿轮工人

    我有许多 Gearman 工作人员不断运行 保存用户页面浏览记录等内容 偶尔 我会更新 Gearman 工作人员使用的 PHP 代码 为了让工作人员切换到新代码 我杀死并重新启动了工作人员的 PHP 进程 有什么更好的方法来做到这一点 据推
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 使用 strtotime() 计算时间差(以小时和分钟为单位)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions time1
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • 如何验证使用 php 上传的文件不包含可执行二进制文件?

    使用简单的 Firefox 插件 黑客可以更改他们想要上传的任何文件的 MIME 类型 绕过文件类型检查器 然后 黑客可以使用 GIMP 等程序将 php 脚本嵌入到图像 音频或任何其他文件的二进制数据中 我该如何检查并防止这种情况发生 您
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • PHP 如果不存在,则从字符串中删除 ','

    我正在运行这段代码 stmt pdo conn gt prepare SELECT from admin where support emails support emails and logged logged and disabled
  • $scope.$digest 之后立即触发事件

    在我的 AngularJS 应用程序中 有几个点我想等待 scope被处理到 DOM 中 然后在其上运行一些代码 就像 jQueryfadeIn 例如 有没有办法监听某种 digestComplete 消息 我当前的方法是 设置后立即 sc
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • 如何在无法重启的服务器(Apache)上使用gettext?

    我在服务器故障上问了这个问题 https serverfault com questions 104224 how do you use gettext on server apache you cant restart但我没有得到任何回应
  • 根据通过 AJAX 请求的用户输入重绘 google 图表

    我有一个谷歌图表从我的数据库中提取数据 它可以按我想要的方式工作 根据 URL 中的 get 请求 它从所选表中提取数据 我想根据下拉菜单中选定的表通过 ajax 更新此图表 我无法突破的部分是通过 ajax 获取数据响应 我认为下面的代码
  • Twig:选择某些块并渲染它们

    我正在将 twig 模板引擎集成到 PHP 应用程序中 特别是 我想使用 twig 引擎来渲染表单 了解了 symfony2 如何使用 twig 渲染表单小部件后 他们有一个巨大的模板文件 其中包含所有小部件 如下所示 block pass
  • 使用php将文本文件转换为xml?

    data txt ha15rs 250 home2 gif 2 ha36gs 150 home3 gif 1 ha27se 300 home4 gif 4 ha4678 200 home5 gif 5 我想使用 php 使用 simplex
  • 如何将参数传递给 Symfony2 中的验证约束 - 在 yml 中

    我正在尝试向我的应用程序添加一个包范围的参数 以便我可以将其添加到我的验证约束文件 validation yml 中 myApp myBundle Entity Contact properties name NotBlank messag
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • Laravel 5.3:护照实现 - {“error”:“invalid_client”,“message”:“客户端身份验证失败”}

    我按照中提到的确切步骤进行操作Laracast Laravel 5 3 的新增功能 Laravel Passport https laracasts com series whats new in laravel 5 3 episodes
  • PHP 时间间隔

    我正在寻找一个看起来应该非常简单的解决方案 但似乎我不能在这里找到任何好的答案 而且我自己似乎无法让它发挥作用 我正在寻找的是设置开始时间 结束时间 然后迭代给定时间间隔之间的一组时间 例如 上午 9 00 下午 5 00 是开始时间 这些

随机推荐

  • 通过 javascript 更改页面比例

    我希望根据分辨率缩放网站主体 但代码似乎不起作用 document body style transform scale window screen availHeight 2 document body style o transform
  • 对动态表行进行编号

    我正在使用 jQuery 制作动态 HTML 表格 在表中 我的用户有两种交互 追加一行 删除特定行 对行进行编号的问题是 如果用户删除特定行 则该行后面的所有行都需要重新编号 我必须选择已删除行之后的所有行并将其行数减去 1 有更好的方法
  • 如何在 SQL Server 上启用 MSDTC?

    这甚至是一个有效的问题吗 我有一个使用 MSTDC 的 NET Windows 应用程序 它抛出异常 System Transactions TransactionManagerCommunicationException 分布式事务管理器
  • 为什么 elementtree.ElementTree.iterparse 使用这么多内存?

    我正在使用 elementtree ElementTree iterparse 来解析一个大的 371 MB xml 文件 我的代码基本上是这样的 outf open out txt w context iterparse copyrigh
  • easeljs 将图像分割成几部分

    我是 easeljs 的新手 想知道如何将图像分割成给定数量的块 根据我到目前为止收集到的信息 我应该使用 SpriteSheets 来完成此任务 然而 我见过的唯一教程是在一张 SpriteSheet 中包含多个图像的教程 而不是将一张图
  • 服务器发送事件在 Google Chrome 中不起作用

    这是我的服务器 JSP 代码 Server Date jsp 这是我的客户端 jsp 页面 Client Serverdate jsp
  • 将一列 json 字符串转换为一列数据

    我有一个大约 30000 行的大数据框和一个包含 json 字符串的列 每个 json 字符串都包含许多变量及其值 我想将此 json 字符串分解为数据列 两行看起来像 0 a 1 b 2 c 3 1 a 4 b 5 c 6 我想将其转换为
  • 在各州之间共享 $Scope 数据

    我正在尝试从孩子访问父状态 我尝试过这个 但它不起作用 angular module myApp controller compareCtrl scope function scope scope test scope parent ser
  • 尝试了解 REPL 上声明的类在内部是如何处理的

    我试图了解 REPL 中范围界定的工作原理 我尝试按照 Joshua Suereth 的 Scala 深入 一书的第 5 1 1 节进行操作 这是在 Windows XP Java 7 和 Scala 2 9 1 上进行的 我声明一个类Di
  • 如何使用 JFileChooser 查找文件位置

    有没有一种方法可以用来简单地查找文件位置 我试图允许用户选择一个文件并打开它 但我必须让 JFileChooser 选择文件并将位置发送到另一个方法 最好的方法是什么 中的例子javadoc显示执行此操作 JFileChooser choo
  • 生成随机订单号但阻止在 WooCommerce 中重新生成

    我试图在创建订单号时添加一个随机字符串 因为默认的序列号很容易被猜到 我尝试了这个片段 function generate random string length 16 return substr str shuffle str repe
  • bcrypt 不是 azure 应用服务上的有效 win 32 应用程序

    为了使用 Node 库 Sharp 进行一些图像处理 我必须将 Azure 应用服务上的节点可执行文件升级到 64 位 我通过手动下载可执行文件然后将其路径设置为IISNode yml 不幸的是 当我启动应用程序时 它会抛出以下错误 应用程
  • 将 .obj 转换为 .js 文件

    我已经浏览了不同的 Three js 示例 某些示例使用 js 或 bin 文件而不是 obj 文件 例如用于 webgl materials cars html 示例 如何获取 obj 文件的 js 文件 The 三 js编辑器 转换器
  • 将 jquery 函数应用于 ajax 内容

    我想将此功能应用于由ajax加载的内容 问题是 该功能不适用于此类内容 这个每个功能有某种解决方法吗 liquidcam each function index if this width this height this parent p
  • 跳跃扭曲的光标

    我正在尝试使用 Objective C 沿着任何 UI 元素外部的路径移动 Mac 光标的位置 不仅仅是在某些窗口上 而是在整个屏幕上 与鼠标悬停的位置无关 我不想直接将鼠标扭曲到某个位置 而是逐步将其移动到那里 即迭代循环 并在每次迭代中
  • gets.chomp 而不移动到新行

    我了解自动在末尾的 nputs and gets 以及如何处理这些问题 但是有没有办法在按 Enter 进行输入后保持显示点 光标位置 如果愿意的话 移动到新行gets e g print Hello my name is a gets c
  • 如何在Python中使用nosetest/unittest断言输出?

    我正在为下一个函数编写测试 def foo print hello world 所以当我想测试这个函数时 代码将是这样的 import sys from foomodule import foo def test foo foo outpu
  • Web 应用程序问题(web.config 错误) 使用 IIS7.5 和 ASP.NET v2 的 HTTP 500.19

    这让整个团队都快疯了 IIS 或我们的 Web 服务器肯定有一些简单的错误配置部分 但每次我们尝试在 IIS 7 5 上运行 ASP NET Web 应用程序时 我们都会收到以下错误 这是完整的错误 HTTP Error 500 19 In
  • .NET NetworkStream.EndWrite() 写入的字节数

    MSDN文档明确指出 获取到NetworkStream后 可以调用EndWrite方法 成功完成发送操作并返回数量 发送的字节数 强调我的 但是 它什么也不返回 void public override void EndWrite IAsy
  • PHP,一个奇怪的变量范围?

    这更多的是一个关于 为什么 然后 如何做 的问题 但它已经困扰我好几天了 目前 我正在使用 CodeIgniter 进行一些工作 并暂时从 Ruby 返回到 PHP 这让我对以下作用域魔法感到困扰