如何将常量作为函数名来调用?

2023-12-24

在 PHP 中,您可以通过在变量中调用函数名称来调用函数。

function myfunc(){ echo 'works'; }

$func = 'myfunc';
$func(); // Prints "works"

但是,你不能用常量来做到这一点。

define('func', 'myfunc');

func(); // Error: function "func" not defined

有一些解决方法,例如:

$f = func;
$f(); // Prints "works"

call_user_func(func); // Prints "works"

function call($f){ $f(); }
call(func); // Prints "works"

PHP 文档上callable https://www.php.net/manual/en/language.types.callable.php says:

PHP 函数通过其名称作为字符串进行传递。可以使用任何内置或用户定义的函数,但语言构造除外。

似乎没有什么关于常量值不可调用的问题。

我也尝试过检查一下,当然,

var_dump(is_callable(func));

prints bool(true).

现在,有没有一个解释,为什么会这样呢?据我所知,所有解决方法都依赖于将常量值分配给变量,为什么不能调用常量?

再说一遍,为了非常清楚地说明,我不需要调用该函数的方法,我什至在那里提供了一些方法。我想知道whyPHP 不允许直接通过常量调用函数。


从 PHP 7.0 开始,此功能有效。但你必须使用更详细的语法,以便 PHP 知道你要执行myfunc代替func.

<?php
function myfunc(){ echo 'works'; }
define('func', 'myfunc');

(func)();

在线尝试这个:https://3v4l.org/fsGmo https://3v4l.org/fsGmo

PHP 的问题在于常量和标识符在分词器中表达为相同的东西。在线查看 PHP 如何将此语法标记化 https://3v4l.org/uE4kg

当您使用括号更改常量操作的优先级时,您告诉 PHP 首先解析该常量并使用其值来执行该函数。否则 PHP 会认为func是你的函数的名称。

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

如何将常量作为函数名来调用? 的相关文章

  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • Instagram 如何使用 Amazon S3?

    在将文件上传到 Amazon S3 时 我需要深入了解 Instagram 的工程 我刚刚开始使用 S3 我认为 Instagram 是一个值得效仿的好模式 因为他们每天上传数千张图片 我的应用程序有点相似 用户上传图片 可以删除自己的图片
  • PHP/MySQL:检索邻接列表模型中的单个路径

    有没有什么有效的方法可以在不限制深度的情况下根据节点的ID检索邻接列表模型中的单个路径 就像如果我有一个名为 Banana 的节点的 ID 我可以获得以下路径 Food gt Fruits gt Banana 如果不可能的话也不是什么大问题
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • symfony 2 形式的函数 getName 做什么

    这是我的表格类 class CommentType extends AbstractType public function buildForm FormBuilder builder array options builder gt ad
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 如何在javascript中使用自动递增id?

  • 使用 php 将 HLS Segment (ts) 视频转换并加入到 mp4

    你好我正在使用这个工具 https github com Ejz HLSDownloader https github com Ejz HLSDownloader将 HLS 视频片段从 m3u8 播放列表下载到 ts 文件中 不 我不知道如
  • WooCommerce:用文本覆盖购物车价格

    我们有很多产品具有以下功能 No price 零价格 我们让它们可以通过内置挂钩购买 但购物车仍然将它们显示为具有0 price结账时 我们希望购物车和结帐摘要显示 特殊订单 或任何其他文本 但 WooCommerce 似乎使基于文本的价格
  • Propel Query 中的动态表名称

    我想知道您是否可以使 propel 查询的表名称动态化 有点像变量 一个例子类似于 DynamicVar Query create 我让它在 ifs 中工作 就像下面的例子一样 但如果更动态地制作 可以删除相当多的行 这些表的设置都是相同的
  • CSV 从 UTF8 到 ISO-8859-1

    我正在尝试修改我的 CSV 导出 但它不会将我的 CSV 从 UTF 8 转换 保存为 ISO 8859 1 请问我做错了什么吗 实际上自从修改了这个之后 我得到了一个空的 CSV 文件 php 7 0 x function my Gene
  • 如何在 joomla 模块中通过 javascript 发送输入文件类型

    我想将带有 javascript 的文件发送到 php 文件 我的 php 文件中有这个表单
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • javascript 代码只能在函数之外工作 - 为什么?

    为什么这段代码不能像下面写的那样工作 但如果我注释掉function testBgChange 并将代码保留在该函数内 它可以正常工作 如果我将代码保留在函数中然后调用该函数 会有什么区别
  • ZF2 工厂获取参数

    我有一个动态类别导航 在导航工厂中 我想从路线获取参数 我怎样才能做到这一点 在我看来 在我的 module php 中 public function getServiceConfig return array factories gt
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • PHP - 查找和比较日期

    你好 我有 foreach 我可以在其中获取数据库中的事件数据 我使用数据库中的日期名称 例如 event date 我需要在一个 div 中比较具有相同日期和输出的操作 例如我有这个事件 活动一 9 月 13 日 活动二 9 月 1 日
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但

随机推荐

  • 如何将我的 koa 路线分割成单独的文件?

    我正在尝试找出如何将我的路线分成单独的文件 到目前为止我已经有了这个 但它不起作用 我刚刚得到Not found当我尝试访问时http localhost 3001 api things server js var koa require
  • 循环赛分组名单组合

    编辑 我的问题并不像有人标记的那样重复 另一个问题是不正确的 甚至不起作用 我尝试了几种方法对 itertools combinations 的结果进行分组 但无法得出正确的输出 在游戏中创建比赛需要它 每支球队每天都需要比赛 但仅限一次
  • 计算机视觉:提取有关给定轮廓的形状的信息(例如尖的、圆形的......)

    给定线条和顶点形式的形状的 2D 轮廓 如何从中提取信息 比如 尖的 圆的 直线 形状与给定形状的相似度 代码不是必需的 我更感兴趣 涉及的概念和技术名称 指导我的搜索 提前致谢 影像瞬间 一种方法是计算二维轮廓所描述的形状的一阶和二阶中心
  • 全文搜索:Whoosh Vs SOLR

    我正在开发一个 Django 项目 我需要在其中实现全文搜索 我看过 SOLR 并发现了一些很好的评论 但由于它是用Java实现的 需要在系统上安装java环境和Python 在寻找 SOLR 的 python 等效项时 我见过 Whoos
  • 将 scala 代码概括为函数

    所以我最近不小心写了一个Scala问题的Haskell答案 由于对 Haskell 相当熟悉 解决方案对我来说很容易 myMaxBy a gt a gt Ordering gt a gt a myMaxBy undefined myMaxB
  • 在 BigQuery 中流式传输数据

    在 BigQuery 中流式传输数据后 新数据仅在表中可用一段时间 因为我刷新页面数据消失了 但我仍然可以查询 主要问题是每次我关闭选项卡并再次从存储访问它时可以看到表中的数据 但当我刷新页面时 它又消失了 数据在表中 有时你会看到这样的消
  • Python、嵌套循环、匹配和性能

    我正在尝试使用 Python 2 7 和 Levenshtein 函数将姓氏列表与全名列表进行匹配 为了减少工作量 我仅在第一个字母相同的情况下进行匹配 尽管这似乎在性能方面没有太大差异 如果找到匹配项 则将从全名中删除匹配的单词 以使后续
  • 如何使用vs2012部署mvc 3 /4

    首先 我尝试在网上搜索如何执行此操作 但所有这些都不适合我 还尝试了 Web 部署 Web 部署包和文件系统 如果你们可以的话 我想要的是一个简单的分步指南以及部署 Web 项目的要求 我现在有一个新安装的win7 虚拟机 我在其中尝试了我
  • Spearman 在 R 领带中的 cor.test 是否已修正?

    我想知道 R 中用于计算 Spearman rho 的 cor test 函数是否是平局校正或不 我在其中找不到直接答案官方 R 文档 http stat ethz ch R manual R devel library stats htm
  • 基于一列值的 Excel VBA 过滤表

    我有一个表 我想按其中一列中的值过滤行 用于过滤的值存储在单独的列中 而不是在表中 这是我到目前为止所拥有的 Dim table1 As ListObject Dim range1 As Range Set range1 ActiveShe
  • 谷歌在火狐浏览器中放置错误

    我使用 google places autocomplete 来填充字段地址 地址 城市 国家 地区 邮政编码 纬度 经度 它在所有浏览器中都能很好地工作 但在 Firefox 浏览器中并非每次都能工作 这可能是由缓存引起的 火狐浏览器 代
  • 在python中将数组的字符串表示形式转换为numpy数组

    I can 将列表的字符串表示形式转换为列表 https stackoverflow com questions 1894269 convert string representation of list to list in python
  • 无法解析Build/build.framework.js.br

    我们已将统一应用程序上传到托管商 当我们从应用程序启动index html时 出现错误 无法解析Build build framework js br 如果启用了构建压缩 但托管内容的 Web 服务器配置错误 不提供包含 HTTP 响应标头
  • CSS 显示调整大小和裁剪的图像

    我想显示来自 URL 的具有特定宽度和高度的图像 即使它具有不同的尺寸比例 所以我想调整大小 保持比例 然后将图像剪切到我想要的大小 我可以用 html 调整大小img财产和我可以削减background image 我怎样才能两者兼得 E
  • 如何在键盘上方显示对话框

    我是android新手 我编写了一个应用程序 当用户选择一件事时 它使用对话框显示数据 对话框如下所示 https docs google com file d 0B3NUAgD0tB0YOS16azFCWXdSVVE edit https
  • python的哈希函数在不同版本中保持相同吗?

    我目前正在使用hash在整数和字符串的元组 以及整数和字符串的嵌套元组等 上 以计算某些对象的唯一性 除非可能存在哈希冲突 我想知道 是hash那些数据类型上的函数保证为不同版本的 Python 返回相同的结果 不会 除了 32 位和 64
  • 保存复选框状态

    我需要知道是否可以保存 a 的状态CheckBox在 C 中 我的意思是如果我检查CheckBox并关闭程序 一旦我重新启动程序CheckBox仍将保持检查状态 是否有可能 这是一个相当普遍的问题 您需要以某种方式自己序列化状态 但是如何以
  • 如何将字节写入文件?

    我有一个返回字符串的函数 该字符串包含回车符和换行符 0x0D 0x0A 但是 当我写入文件时 它仅包含新的换行符 有没有办法让输出包含回车符和换行符 msg function arg1 arg2 arg3 f open tmp outpu
  • 如何在无镜像包的flutter中使用ByteData和ByteBuffer

    我正在尝试开发一个 UDP 应用程序来接收数据并将字节转换为不同的数据类型 我有下面的代码 可以在单独使用 Dart 时使用 import dart io import dart typed data import dart mirror
  • 如何将常量作为函数名来调用?

    在 PHP 中 您可以通过在变量中调用函数名称来调用函数 function myfunc echo works func myfunc func Prints works 但是 你不能用常量来做到这一点 define func myfunc