PHP 可调用对象作为对象成员

2023-11-27

我有课Logger其中,除其他外,还有一个方法Log.
As Log最常见的用途是Logger例如,我已经有线__invoke打电话Log

另一个类“Site”包含一个成员“Log”,它是 Logger 的一个实例。

为什么这会起作用:

$Log = $this->Log;  
$Log("Message");  

但不是这个:

$this->Log("Message");

前者失败并显示“PHP 致命错误:调用未定义的方法 Site::Log()”
这是可调用对象实现的限制,还是我误解了什么?


不幸的是,这(仍然)是 PHP 的一个限制,但仔细想想,这是有道理的,因为类可以包含共享名称的属性和方法。例如:

<?php
class Test {
    public $log;

    public function __construct() {
        $this->log = function() {
            echo 'In Test::log property';
        };
    }

    public function log() {
        echo 'In Test::log() method';
    }
}

$test = new Test;
$test->log(); // In Test::log() method
call_user_func($test->log); // In Test::log property
?>

如果 PHP 允许使用您想要的语法,将调用哪个函数?不幸的是,这只给我们留下了call_user_func[_array]()(或复制$this->log到另一个变量并调用它)。

但是,如果可以接受以下语法,那就太好了:

<?php
{$test->log}();
?>

但可惜,事实并非如此。

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

PHP 可调用对象作为对象成员 的相关文章

  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • SQL Server 2008 R2 Varbinary 最大大小

    在 SQL Server 2008 R2 中使用 varbinary max 可以插入的文件的最大大小是多少 我试图将列中的最大值更改为超过 8 000 字节 但它不允许我这样做 所以我猜测最大值是 8 000 字节 但是从MSDN 上的这
  • launch4j exe本身没什么可说的,有人有建议吗?

    在Linux上运行 我使用launch4j来打包一个exe 我将 exe 复制到我的 Windows 7 VM 中并运行它 但什么也没发生 我用 l4j debug 运行它 但仍然没有任何反应 至少 如果有日志文件 我找不到它 我在这里缺少
  • 包不需要与 java 文件所在的子目录匹配吗?

    今天早上我正在为我的 java 认证编写一些练习程序 并注意到我输错了一个包名称 因此它与 java 文件所在的子目录不匹配 我编译了代码 预计会出现错误 但所有内容都编译了文件 甚至没有警告 我用谷歌搜索了一下 我读到的大多数页面都说包名
  • flutter web 的 http 请求被 Cors 策略阻止

    我有一个 Android Ios 和 Web 应用程序 使用 php 作为后端 所有 Api 在 android 和 ios 中都工作正常 但在 web 中抛出 CORS 错误 出现这样的错误 从源 http localhost 49168
  • Visual Studio 2013 安装 microsoft.net Framework 4.51 时出错

    我在安装 vs 2013 时遇到问题 下图显示了错误 我在 Google 上进行了大量研究 发现在 Windows 8 1 上 net Framework 4 5 1 现在已经成为操作系统的一部分 当 VS 2013 尝试安装 net Fr
  • 如何避免 nginx 在用作代理(proxy_pass)时用空格替换 %20 ?

    我使用 nginx 作为 apache 服务器的代理 这是我的配置 location subsite proxy pass http 127 0 0 1 subsite 1 query string 问题是 如果我发送带有 20 的请求 例
  • iPhone:通过本地通知增加应用程序徽章

    当应用程序未运行时 是否可以通过本地通知增加应用程序徽章 我知道如何设置徽章 但还没有找到任何方法来增加这个值 localNotification applicationIconBadgeNumber 23 Update 我找到了一个 远非
  • Oracle SQL 获取第 n 个元素正则表达式

    我正在尝试使用 Oracle 中的 SQL 获取逗号分隔字符串中的第 n 个元素 到目前为止我有以下 SELECT regexp substr 100016154 5101884LT00001 10000001089210000001265
  • WCF 自定义 Http 代理身份验证

    是否可以为 WCF 提供自定义代理地址和自定义凭据 我在 stackoverflow 上找到了这个答案 如何使用生成的 WCF 客户端的凭据设置代理 但我遇到了一个复杂的问题 我要进行身份验证的服务使用自己的身份验证 因此我必须使用两组凭据
  • Azure Ad b2c:通过邀请添加新成员用户

    我有一个Azure 广告 B2C在 Azure 上运行 我想在 B2C 中创建带有邀请的用户 我尝试创建来宾用户 但该用户无法登录 因为该用户是作为 B2B 用户创建的 我也尝试过手动添加用户 但我无法添加自己的域 例如 电子邮件受保护 但
  • Json.net 反序列化具有非字符串键类型的嵌套字典

    我正在使用 Json NET 反序列化一个对象 其中包含具有自定义 非字符串 键类型的嵌套字典 这是我正在尝试做的事情的示例 public interface IInterface String Name get set public cl
  • javascript - 比较不同格式的日期

    我有两个日期 我需要比较它们 看看其中一个是否大于另一个 但它们的格式不同 我不确定比较两个日期的最佳方法 格式为 1381308375118 这是 var futureDate 这是由创建的 var today new Date toda
  • 如何从自定义按钮调用数据表 csv 按钮

    需要从我的自定义按钮调用 csv 按钮
  • 网络音频启动和停止振荡器然后再次启动

    我正在尝试启动和停止声音 那行得通 但我无法再次启动声音 我真的需要再次制作另一个振荡器吗 这看起来非常不直观 一定会有更好的办法 这就是我所拥有的一切 oscillator1 noteOn 0 oscillator1 noteOff 0
  • PHPSESSID 未保存到 cookie

    保存会话 ID 的 PHPSESSID 变量未保存到客户端 cookie 中 这会导致每次我调用时都会生成一个新的会话 IDsession start 功能 当我使用 FireFox Opera 和 Chrome 时 情况就是如此 对于 s
  • 将JSON数据插入到android中的SQLite数据库中

    我想将 JSON 数组中的数据插入到 SQLite 数据库中 我创建了两个类 CategoryHelper java 和 AndroidJSONParsingActivity java 来获取 java 响应 当我运行代码时出现异常data
  • 如何将 boost::serialize 转换为 sqlite::blob?

    我正在从事一个科学项目 需要多种程序能力 在寻找可用的工具后 我决定使用 Boost 库 它为我提供了 C 标准库未提供的所需功能 例如日期 时间管理等 我的项目是一组命令行 它处理来自旧的 自制的 基于纯文本文件的数据库的大量数据 导入
  • 3d numpy 数组的众数/中值/平均值

    我有一个 3d numpy 数组 我的目标是获取它的平均值 众数 中位数 它的形状为 500 300 3 我想得到例如 430 232 22 作为模式 有没有办法做到这一点 标准 np mean array 给了我一个非常大的数组 我不知道
  • Java 监听器必须继承自 java.util.EventListener - 为什么?

    在javadoc中它说EventListener是 所有事件侦听器接口都必须扩展的标记接口 这是为什么 让自定义监听器实现EventListener有什么意义 是否有对 EventListener 进行特殊处理的地方 可能被使用过javab
  • PHP 可调用对象作为对象成员

    我有课Logger其中 除其他外 还有一个方法Log As Log最常见的用途是Logger例如 我已经有线 invoke打电话Log 另一个类 Site 包含一个成员 Log 它是 Logger 的一个实例 为什么这会起作用 Log th