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
相关产品推荐
相关产品推荐

