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

PHP技术问询:如何判断scan函数参数的命名空间是否为Imperium

解决命名空间判断问题:根据实例所属命名空间输出yes/no

我来帮你完善代码,让它能准确根据传入Soldier实例的命名空间输出对应的结果。这里是完整的可运行代码:

namespace Imperium;
class Soldier {
    public function getNameSpace() {
        return __NAMESPACE__;
    }
}

namespace Chaos;
class Soldier {
    public function getNameSpace() {
        return __NAMESPACE__;
    }
}

class Scanner {
    public function scan($soldier) {
        // 调用实例的getNameSpace方法判断命名空间
        if ($soldier->getNameSpace() === "Imperium") {
            echo "yes\n";
        } else {
            echo "no\n";
        }
    }
}

// 实例化Scanner
$scanner = new Scanner();

// 测试Imperium命名空间的Soldier
$imperiumSoldier = new \Imperium\Soldier();
$scanner->scan($imperiumSoldier); // 输出: yes

// 测试Chaos命名空间的Soldier
$chaosSoldier = new Soldier();
$scanner->scan($chaosSoldier); // 输出: no

关键说明:

  • 当实例化其他命名空间的类时,需要使用完全限定名称(比如\Imperium\Soldier),或者提前用use语句引入:use Imperium\Soldier as ImperiumSoldier;,之后就可以直接new ImperiumSoldier()。
  • 用===严格比较命名空间字符串,比==更严谨,能避免类型转换带来的意外问题。
  • 你的核心逻辑是对的,通过类内的__NAMESPACE__魔术常量获取当前类所属的命名空间,再在scan方法中做判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:25:32