PHP OOP类方法中布尔值判断失效及输出格式调整求助
你的PHP OOP问题解答
咱们来逐个解决你遇到的两个问题:
1. 类方法中if判断不生效的原因
你在yesOr()方法里犯了一个新手常见的错误:没有通过$this访问类的属性。
在类的方法内部,要访问类的成员属性(比如你定义的$youKnow),必须用$this->属性名的语法。你直接写if ($youKnow)的时候,PHP会把$youKnow当成方法局部作用域里的变量——但这个变量根本没定义,默认会被视为null,在布尔判断里等价于false,所以代码会走else分支输出"not"。
修复后的yesOr()方法应该是这样:
public function yesOr() { if ($this->youKnow) { echo "Now I know the basics of OOP!"; } else { echo "not"; } }
2. 让布尔值输出为True/False而非"1"
PHP在直接echo布尔值时,会自动做类型转换:true会变成字符串"1",false会变成空字符串。要输出"True"或"False"格式的字符串,有几种实用方法:
方法一:三元运算符手动转换(最直观)
// 输出True或False echo $yourBooleanVar ? 'True' : 'False';在你的构造函数里就可以改成:
echo $this->youKnow ? 'True' : 'False';方法二:使用var_dump()(适合调试)
这个方法会同时输出变量的类型和值,调试时很有用:var_dump($this->youKnow); // 输出bool(true) 或 bool(false)方法三:结合json_encode()和ucfirst()
json_encode()会把布尔值转成小写的"true"/"false",再用ucfirst()把首字母大写:echo ucfirst(json_encode($this->youKnow)); // 输出True 或 False
修复后的完整代码
把两个问题都修复后的代码如下,你可以直接运行测试:
<?php class Knowledge { public $youKnow; public function __construct($youKnow) { $this->youKnow = $youKnow; // 输出True/False代替1 echo $this->youKnow ? 'True' : 'False'; echo "\n"; } public function yesOr() { // 通过$this访问类属性 if ($this->youKnow) { echo "Now I know the basics of OOP!"; } else { echo "not"; } } } $randInstance = new Knowledge(true); $randInstance->yesOr(); $try = true; if($try){ echo $try ? 'True' : 'False'; echo " this one works!"; } ?>
内容的提问来源于stack exchange,提问作者DrSocket
相关产品推荐
相关产品推荐

