在函数内部调用对象

2023-11-27

所以我不会在 PHP 中进行 OOP。

这是我的问题,我有一个对象,我可以从中调用函数,并且它返回一个数组。这是代码。

$obj = new OBJ();

function go($url){
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

go('http://www.mysite.com/hello');

这给了我错误

致命错误:在非对象上调用成员函数grabArray()


这不是 OOP 问题,而是范围问题。 $obj 在函数 go() 中不可见。您要么需要将其作为参数传递,要么使用 global 关键字将其带入函数的作用域(不推荐)

推荐方式

$obj = new OBJ();

go('http://www.mysite.com/hello', $obj);

function go( $url, $object )
{
    $array = $object->grabArray($url);
    echo $array['hits'];
}

不推荐的方式

$obj = new OBJ();

go('http://www.mysite.com/hello');

function go( $url )
{
    global $obj;
    $array = $object->grabArray($url);
    echo $array['hits'];
}

还有另一个类似于 OOP 组合概念的解决方案 - 您可以让 go() 函数负责创建 OBJ 实例。

go('http://www.mysite.com/hello');

function go( $url )
{
    $obj = new OBJ();
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

但这可能并不理想,因为每次执行 go() 时都会创建一个全新的 OBJ 实例。您可以通过使用静态变量“缓存” go() 内的 OBJ 实例来解决此问题

function go( $url )
{
    static $obj;
    if ( is_null( $obj ) )
    {
        $obj = new OBJ();
    }
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

但是,这种类似于组合的方法实际上只有在除了 go() 函数内部之外的其他任何地方都不使用 OBJ 实例时才有用 - 如果您在其他地方使用它,那么参数方法是最佳选择。

这一切都是为了为手头的任务选择正确的解决方案!

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

在函数内部调用对象 的相关文章

  • 如何检查 id 是否已存在 - codeigniter

    我正在尝试检查数据库中的 id 是否已存在 如果不存在则仅插入该 id 而不是其他存在的 id 我尝试执行一个 where 语句来检查数据库中是否存在它们的 id 但即使它们是新信息 它也不会将其插入数据库中 我在这里很迷路 任何指导将不胜
  • CodeIgniter 中的 base_url() 和 403 错误

    在 HTML 视图中 css 链接代码如下所示 但我的浏览器显示的地址具有双域地址 www jedendzien pl www jedendzien pl assets css style css 所以我收到 403 错误 我通过以下方式创
  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • 在Python中实现函数的前向声明[重复]

    这个问题在这里已经有答案了 是否可以在 python 中声明函数并单独实现它们 我的意思是在 C 中 void foo void foo C 前向声明用于解决依赖性问题 功能foo由函数使用bar and foo needs bar在声明它
  • PHP 中的 XPath 删除 HTML 标签

    我在 PHP 中使用 XPath 来检索 HTML 文档的一部分 假设我的 HTML 文档如下所示 div a href some link address com Hello a p Some text here p div div p
  • 联系表 7 根据用户选择立即发送给多个联系人

    您好 我正在 WordPress 联系表单 7 中创建联系表单 如果用户选择 全部 我想立即向多个收件人发送电子邮件 我看过这个 但似乎没有记录您是否可以一次发送给多个收件人http contactform7 com selectable
  • JavaScript 函数参数和范围

    我用下面列出的代码做了一些测试 function foo x alert y var y I am defined outside foo definition foo 上面的代码给了我一个警告 我是在 foo 定义之外定义的 然后另一个测
  • Nginx 与 phpmyadmin 登录后重定向错误

    我正在使用 nginx 设置 phpMyAdmin 我可以访问 phpMyAdminhttp localhost phpmyadmin http localhost phpmyadmin 但是 当我登录时 URL 被重定向到http loc
  • 使用类型映射选项的 PHP SoapClient 示例

    我在 PHP 的 SoapClient 中的命名空间使用方面遇到了一个小问题 从文档中我相信构造函数的类型映射选项将解决我的问题 http php net manual en soapclient soapclient php http p
  • Magento:查找包含产品的订单

    Magento 有没有办法找到包含给定产品的所有订单 如果可以通过管理面板来完成就更好了 报告 gt 产品 gt 订购的产品向我提供了产品销售的日期以及包含该产品的订单数量 但我需要知道哪些特定订单包含该产品 谢谢你 这个问题我在另一个问题
  • URL 重写 OpenCart 产品 SEO

    我想重写我的 opencart 网上商店的产品网址 Opencart 本身有一个 seo 实现 这真的很糟糕 我已经更新了 seo 实现 以便能够对多个类别使用相同的关键字 请参阅 Opencart 重复 URL 关键字 https sta
  • 在订单编辑页面添加自定义元框并将其显示在客户订单页面上

    在 WooCommerce 中 想要在 WooCommerce 管理订单页面上添加自定义元框 在此框中 我只想在保存到该订单的文本字段中输入跟踪号码 然后在客户查看订单页面上 我想显示一个按钮 用于打开带有跟踪信息的模式 该模式只会拉入一个
  • Laravel - JWT Auth 无法从请求中解析令牌

    我在中间件中添加了以下代码以进行用户身份验证JWT Auth https github com tymondesigns jwt auth 它适用于中间件处理的所有路由 public function handle request Clos
  • 如何在服务器(无 GUI)上呈现网页以进行打印?

    我正在尝试使用 PHP 脚本将页面实用地打印到办公室打印机 这是我到目前为止所得到的 我在服务器上安装了一台打印机 我可以通过命令行的打印命令使用 PHP 向其发送作业 我还可以使用 PHP 脚本编写纯文本文件 然后将它们添加到打印提示中
  • 来自外部文件的 PHP 变量?

    编辑 完成的解决方案 工作代码 所以 这是我的一个朋友帮我想出来的 这是我在 K2 items php 文件中使用的部分 div class fb comments div
  • PHP cURL 代理带标头?

    我正在制作一个 PHP 图像代理脚本 我需要它不仅能够回显其请求的图像的内容 而且还能够以相同的方式重现图像请求的标头 我见过一个 另一个 但没有同时看到过 这些 cURL 选项让我感到困惑 我该怎么做 抱歉 我不确定你想要什么 这是从图像
  • (mysql, php) 如何在插入数据之前获取auto_increment字段值?

    我正在将图像文件上传到存储服务器 在上传之前 我应该编写文件名 其中包含自动增量值 例如 12345 filename jpg 在插入数据库之前如何获取自动增量值 我只看到一种解决方案 插入空行 获取其自增值 删除这一行 使用 p 1 中的
  • 一个模型中的多个表 - Laravel

    我的索引页使用数据库中的 3 个表 索引滑块 索引特征 页脚框 我使用一个控制器 IndexController php 并像这样调用三个模型 public function index return View make index gt
  • 为什么 foreach 这么慢?

    PHPBench com http www phpbench com 在每个页面加载上运行快速基准测试脚本 在 foreach 测试中 当我加载它时 foreach 的运行时间是第三个示例的 4 到 10 倍 为什么本机语言构造明显比执行逻
  • 将 IP 地址与 IPv6 块进行比较

    我使用 PHP 将用户 IP 地址与 IP 块列表进行比较 其中大多数是 IPv4 但其中一些是 IPv6 我从用户那里获得的 IP 地址始终与 IPv4 兼容 至少我是这么假设的 我将如何比较这个 这就是我现在正在使用的 function

随机推荐

  • 使用 Java 的文件资源管理器 - 如何进行?

    我准备使用 Java 创建一个文件浏览器 目的是尽可能模仿默认浏览器的行为 无论底层操作系统是什么 我没有用 Java 做过任何 GUI 编程 我已经查找了 Swing SWT 和 JFace 并且我将通过本教程开始我的项目 http ww
  • window.navigator.userAgent 真的会被弃用吗?

    I just 在 MDN 上阅读关于window navigator userAgent 已弃用 此功能已从 Web 标准中删除 尽管某些浏览器可能仍然支持它 但它正在开发中 被丢弃 不要在旧项目或新项目中使用它 页面或网络应用程序 使用它
  • 使用 gdb/gdbserver 远程调试共享库

    我的问题是关于使用 gdb gdbserver 远程调试嵌入式 Arm 处理器上的应用程序 我可以调试应用程序本身 但应用程序动态链接到实现内部通信协议的共享库 我希望能够在共享库函数中设置断点 因此尝试找出一些设备发现问题 我已确保该库使
  • 将 RxJS Observable 收集到数组

    我想使用 RxJS 将异步事件世界与同步世界 桥接 具体来说 我想创建一个函数 它返回在某个时间间隔内收集的事件数组 我可以创建 Observable 来执行我想要的操作 var source Rx Observable interval
  • 无法识别“pip”[重复]

    这个问题在这里已经有答案了 我尝试安装PySide但我从 powershell 收到错误如下 pip The term pip is not recognized as the name of a cmdlet function scrip
  • 检测可移动介质的弹出/插入

    我正在开发一个项目 需要能够检测何时插入或移除 CD 或 USB 驱动器 我发现一些源代码本应执行此操作 但是 当我插入或弹出 CD 时 似乎没有任何反应 有人可以验证来源是否正确 并指出我在这里可能做错了什么吗 public class
  • 有人可以解释一下这个 C++ typedef 吗?

    我已经有一段时间没有使用 C 了 刚刚开始使用它 虽然大部分内容都有道理 但有些地方我发现有点混淆 例如 有人可以解释一下这一行的作用吗 typedef bool OptionManager OptionHandler const ABSt
  • Android 加速度计精度(惯性导航)

    我正在考虑为 Android 手机实现惯性导航系统 但我意识到考虑到加速度计的精度和读数的持续波动 这很难 首先 我将手机放在平坦的表面上 并在 X 和 Y 方向上采样了 1000 个加速度计读数 与桌子平行 因此这些方向上没有重力作用 然
  • pandas json_normalize 具有非常嵌套的 json

    我一直在努力normalize一个非常嵌套的 json 文件 我稍后将进行分析 我正在努力解决的是如何进一步深入正常化 我经历了pandas io json json normalize文档 因为它完全按照我想要的方式执行 我已经能够将其中
  • 按时间间隔聚合一个数据帧来自另一个数据帧

    我正在尝试聚合两个数据帧 df1 and df2 第一个包含 3 个变量 ID Date1 and Date2 df1 ID Date1 Date2 1 2016 03 01 2016 04 01 1 2016 04 01 2016 05
  • QList什么时候会发生深拷贝?

    在我正在上的一堂课上 我正在同时处理几个问题QLists 我听说 Qt 尽可能不进行列表的深层复制 据我了解 这意味着执行此操作时不会发生深层复制 QList
  • 使用 angularjs 导出到 xls

    我正在开发 Angular JS 应用程序 但我陷入了必须使用 Angular JS 将数据导出到 Xls 的情况 我在互联网上搜索了很多导出功能或任何 Angular js 库 所以我可以做到这一点 或者至少我可以了解如何导出 我没有任何
  • 使用 .gif 的动画启动画面

    我想使用动画gif对于启动画面 所以我改变了src在 config xml 中放入我的 gif 中 如下所示
  • 如何在Cocoa中绘制锥形线+椭圆形阴影

    背景 下图是 OS X Lion 中的 Mail app 当源列表变得太长时 源列表底部的按钮上方会出现一条漂亮的阴影线 当您滚动时 源列表将移动到该阴影线下方 当您展开窗口以使源列表中的所有内容都适合而无需滚动时 阴影线就会消失 问题 我
  • Android Studio 导出带有依赖项的 jar

    我在 Eclipse 中有一个带有 Maven 的项目库 生成的 jar 包含一些库依赖项 现在我正在迁移到 Android Studio 我想构建相同的 jar 我可以在 gradle 中生成一个包含以下几行的 jar task clea
  • 为什么 console.log(document.getElementById( 'blah' ))) 在 Chrome 中给出不同的日志消息?

    我只是在乱搞 正在注销我用标准 javascript 选择的 div 但我已在 jQuery document ready fn 块内执行了该 div document ready function console log document
  • 如何使用 Java 类的参数调用 Python 脚本

    我在用Python 3 4 我有一个Python脚本myscript py import sys def returnvalue str if str hi return yes else return no print calling p
  • ScrollView 与 TimePicker 的滚动发生冲突,结果 Timepicker 不滚动

    希望这里有一个解决方案 我的 main xml 中有一个 XML TimePicker 和 ScrollView 并且设置后 TimePicker 不会滚动 如果我删除 ScrollView Timepicker 会滚动得很好 但显然我两者
  • 恢复推送的 git 提交

    我有一个有两个分支的存储库 master 和 dev 我正在主分支上工作并拉取 并收到一条消息说存储库是最新的 我提交了更改 并推送到远程存储库 在 github 上 我收到一条消息 说某些更改被拒绝 然后我做了一个git pull ori
  • 在函数内部调用对象

    所以我不会在 PHP 中进行 OOP 这是我的问题 我有一个对象 我可以从中调用函数 并且它返回一个数组 这是代码 obj new OBJ function go url array obj gt grabArray url echo ar