You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade模板中获取对象类名并进行条件判断的方法

问题根因

你之前的判断逻辑无法生效,核心原因是直接将对象实例与类名字符串做严格相等比较:$action是DeleteAction类的实例(属于对象类型),和字符串类型的类名类型不匹配,使用===做严格判断时永远不会成立。

正确实现方式

方案1:使用instanceof做类类型判断

这是PHP官方推荐的类实例判断方式,逻辑直观,支持兼容目标类的所有子类实例,Blade中的写法为:

@if($action instanceof \TCG\Voyager\Actions\DeleteAction)
    // 匹配到对应Action时执行的逻辑
@endif

这里采用::class语法直接引用类的全限定名,不需要手动硬编码字符串路径,既能避免拼写错误,也能被IDE自动识别关联,比手写字符串路径更可靠。

方案2:使用get_class()获取类名做严格匹配

如果业务要求必须严格判断$action是目标类的直接实例(排除所有子类实例的情况),可以通过PHP内置函数get_class()获取对象的实际类名,再和目标类做比较:

@if(get_class($action) === \TCG\Voyager\Actions\DeleteAction::class)
    // 匹配逻辑
@endif
选型提示
  • 日常开发优先选择instanceof判断:符合面向对象的多态设计逻辑,后续如果有继承自DeleteAction的自定义Action类,不需要修改判断逻辑就能自动兼容
  • 只有当业务逻辑明确要求排除子类实例时,才使用get_class()做严格的类名匹配

内容的提问来源于stack exchange,提问作者Farshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 13:15:08