类型提示:方法应该接受任何 $art 对象

2024-01-15

我有一个“Collection”类,它有一个 add 方法。 add 方法应该只接受对象。所以这是期望的行为:

$x=5;//arbitrary non-object
$obj=new Foo; //arbitrary object

$collection=new Collection;
$collection->add($obj); //should be acceptable arg, no matter the actual class
$collection->add($x); //should throw an error because $x is not an object

根据 PHP 手册,可以通过在前面加上$arg带有类名。由于所有 PHP 类都是以下类的子类stdClass,我认为这个方法签名会起作用:

public function add(stdClass $obj);

但它失败并显示“参数必须是 stdClass 的实例”。

如果我将签名更改为我定义的父类,则它可以工作:

class Collection {
  public function add(Base $obj){
    //do stuff
  }
}

$collection->add($foo); //$foo is class Foo which is an extension of Base

有谁知道如何为通用对象输入提示?


与Java不同Object类,PHP没有对象的基类。对象不继承stdClass:它是默认对象实现,而不是基类。因此,不幸的是,您无法为 PHP 中的所有对象键入提示。你必须做类似的事情:

class MyClass {
    public function myFunc($object) {
        if (!is_object($object))
             throw new InvalidArgumentException(__CLASS__.'::'.__METHOD__.' expects parameter 1 to be object");
    }
}

幸运的是,PHP 已经定义了InvalidArgumentException为此目的的类。

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

类型提示:方法应该接受任何 $art 对象 的相关文章

随机推荐

  • 如果javascript只在特定页面上使用,为什么不应该将其放在视图中?

    In writes 不引人注目的 JS 需要考虑的其他事情 您已经这样做了 是您确实需要在应用程序中使用不显眼的 javascript 不显眼的 JS 基本上意味着您能够将页面的 绑定 抽象到资产管道中的 Javascript 文件 造成这
  • 如何允许用户从 Xamarin.Forms 标签复制和粘贴

    如何允许用户从 Xamarin Forms 标签复制和粘贴 在任何平台上单击文本 默认设置不允许突出显示 因此不允许复制和粘贴 任何帮助 将不胜感激 您可以做的是将标签包装在手势识别器中
  • javascript / jquery - 选择两个数字中较大的一个

    我正在尝试使用 javascript 选择两个数字中较大的一个 我知道我可以编写一个 if 语句 但我想知道是否有某种数学运算或其他东西可以提高效率 以下是我使用 if 语句执行此操作的方法 if a gt b c a else c b 我
  • 请求对象没有属性“accepted_renderer”

    如果出现这个问题会怎样 请求对象没有属性 accepted renderer 这些消息在我的日志中 处理此事件时遇到错误 丢弃参数 timestamp 的无效值 Expand 基本视图集类 class BaseViewSet Logging
  • Meteor JS 在客户端 html 上模拟服务器命令行

    我是 Meteor 的新手 想要制作一个简单的应用程序 我无法根据以下内容在服务器端模拟命令行http terokaisti blogspot com 2012 10 writing terminal app with meteor js
  • 使用 Windows 脚本宿主

    我正在将 Windows 脚本主机用于某种安装程序应用程序 并使用它在开始菜单中创建快捷方式 这个问题是我切换到x64环境 win7旗舰版x64 vs2010 时出现的 我添加了对 Windows 脚本宿主对象模型的引用 来自 c wind
  • 根据自定义 TreeItem 属性更改更新 TreeView

    我扩展了 TreeCell 和 TreeItem 类 MyTreeItem 包含一个自定义属性 我在 MyTreeCell 中使用它来渲染图形 字体等 问题是当我设置 MyTreeCell customProperty 时 我不确定如何使
  • 开始涉足 Android 平板电脑开发

    我最近买了一个Motorola XOOM用于开发 Android 应用程序的平板电脑 我在寻找学习资源方面遇到了重大问题 我了解Java Android 开发指南示例代码几乎全部依赖于键盘 否则无法在我的设备上运行XOOM 除了 Andro
  • 验证 asp 文件上传控件客户端

    我的页面上有一个 asp 文件上传控件 如何在客户端验证所选文件 验证规则 1 文件必须是 jpeg png bmp 或 gif 2 文件大小必须在 25 kb 和 2 mb 以内 请帮忙 谢谢 我已尝试以下代码来验证扩展
  • Reactive Extensions 基于特定数量的并行处理

    我是反应式扩展的新手 我有对象集合并为每个对象调用一个方法 并且方法返回布尔值 有没有办法通过使用 for every 循环并调用该方法来遍历每个反应性扩展对给定数量的对象 一次 5 个 同时调用 fork 和 join 方法 并且在第一个
  • 如何使申请仅有效3天

    我正在上述平板电脑上安装此应用程序 我打算向我的客户提供此平板电脑一两天 我想要的是 经检查操作情况 客户应在有效期后无法使用该应用程序 为此 我调用 calander 函数 并将提取的系统日期 日 与我希望应用程序关闭操作的日期进行比较
  • 你的Ruby版本是2.3.1,但是你的Gemfile在运行rails时指定了2.4.1

    我正在尝试从 ruby 2 3 0 升级到 2 4 1 为此 我做了 rvm use 2 4 1 my project create 我已经在另一个项目中使用 2 4 1 我改变了 gemfileruby 2 3 0 to ruby 2 4
  • 简单的pthread! C++

    我不知道为什么这不起作用 include
  • Avalon Dock 浮动锚定物能否更加独立于其父级?

    我有一个 AvalonDock DockingManager 控件 其中包含一些子锚定对象 无文档 如果这些 Anchorables 从主 DockingManager 浮动 我知道它们仍然是 DockingManager 逻辑树的一部分
  • AttributeError:模块“keras.backend”没有属性“image_dim_ordering”

    我尝试执行一些教程迁移学习项目 但我遇到属性错误 我检查了我的tensorflow和keras版本 张量流 1 14 0 喀拉斯 2 2 5 和 python 3 6 9 版本 代码在这里 if K image dim ordering t
  • 初始缩放在 d3 v4 中不起作用

    我已经进口了zoom像这样 import zoom from d3 zoom My svg和组container看起来像这样 const svg select root append svg attr width width attr he
  • Powershell 脚本查询 AD 中特定 OU 的计算机名称并导出

    我几乎 完全阅读 PowerShell 新手 我正在开发一个项目来清点我们网络上某些计算机上安装的软件 我找到了一个脚本来处理软件清单部分 但它依赖于带有计算机名称的文本文件进行扫描 我正在寻找一种方法来查询 AD 中特定 OU 的计算机名
  • const string& 构造函数和模板化 std::set find 的分段错误

    以下代码遇到了段错误const string 构造函数 并以 0 退出string view构造函数 我知道const string 这不是最好的方法 但根据我的理解 如果没有优化 临时string是由构造而成const char 然后它的
  • java中的@符号[重复]

    这个问题在这里已经有答案了 到底是做什么的 Object field做 我正在阅读一些从反编译器获取的代码 它用 Object name field stuff field stuff public static Object fieldN
  • 类型提示:方法应该接受任何 $art 对象

    我有一个 Collection 类 它有一个 add 方法 add 方法应该只接受对象 所以这是期望的行为 x 5 arbitrary non object obj new Foo arbitrary object collection n