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

