PHP静态变量调用方法及在<>中插入self::$tag的实现问题
PHP静态变量调用与标签插入问题解决
你遇到的问题是在字符串中直接引用静态类属性时,PHP无法正确解析它。咱们一步步来解决:
问题根源
在你的surround方法里,<self::$tag>这种写法在字符串中不会被PHP识别为静态变量调用——双引号字符串虽然支持变量解析,但类的静态属性需要用{}包裹才能被正确解析,或者你可以用字符串拼接的方式来处理。
解决方案1:双引号字符串加{}包裹静态属性
修改surround方法,把self::$tag放在{}里,这样PHP就能正确解析这个静态变量了:
<?php class model { public static $tag = "p" ; private static function surround($xx){ // 用{}包裹静态属性,让PHP在双引号中解析它 return "<{self::$tag}>".$xx."</{self::$tag}>" ; } public static function label($xx){ return self::surround("<label>".$xx."</label>") ; } } // 调用示例 echo model::label("Hello World"); // 输出:<p><label>Hello World</label></p> ?>
解决方案2:字符串拼接(更直观)
如果你觉得字符串解析的规则容易搞混,直接用字符串拼接的方式更稳妥,把静态属性和标签字符串分开拼接:
<?php class model { public static $tag = "p" ; private static function surround($xx){ // 直接拼接静态属性和标签部分 return "<" . self::$tag . ">" . $xx . "</" . self::$tag . ">" ; } public static function label($xx){ return self::surround("<label>".$xx."</label>") ; } } // 调用示例 echo model::label("Hello World"); // 输出:<p><label>Hello World</label></p> ?>
额外说明
- 调用静态方法的时候,直接用
类名::方法名()的方式,比如model::label("你的内容") - 如果后续需要修改标签类型,直接修改
model::$tag的值即可,比如model::$tag = "div";,之后调用方法就会用div标签包裹内容了
内容的提问来源于stack exchange,提问作者Mahdi Ben Ayed
相关产品推荐
相关产品推荐

