如何检查类中是否存在属性并使用strtolower()
? (我无法使用property_exists()
,因为它不会让我strtolower()
属性。)我尝试使用get_object_vars()
和foreach()
循环。
error_reporting(E_ALL);
class Test {
public $egg = "yay";
}
$test = new Test();
$find = "EGG";
$vars = get_object_vars($test);
foreach($vars as $var) {
if(strtolower($var) == strtolower($find))
echo 'Var ' . strtolower($find) . ' found in Test class. Value: ' . $test->{$find};
else
echo 'Var ' . strtolower($find) . ' not found in Test class.';
}
输出:
在Test类中找不到Var egg。
我想要输出的内容:
在Test类中找到Var egg。价值:yay
答案 0 :(得分:1)
您搜索了var而不是密钥:
<?php
error_reporting(E_ALL);
class Test {
public $egg = "yay";
}
$test = new Test();
$find = "EGG";
$vars = get_object_vars($test);
var_dump($vars);
foreach($vars as $key=>$var) {
if(strtolower($key) == strtolower($find))
echo 'Var ' . strtolower($find) . ' found in Test class. Value: ' . $test->{strtolower($find)};
else
echo 'Var ' . strtolower($find) . ' not found in Test class.';
}
答案 1 :(得分:1)
<?php
error_reporting(E_ALL);
class Test {
public $egg = "yay";
}
$test = new Test();
$find = "EGG";
$vars = get_object_vars($test);
foreach($vars as $name => $value) {
if(strtolower($name) == strtolower($find))
echo 'Var ' . strtolower($find) . ' found in Test class. Value: ' . $test->{strtolower($find)};
else
echo 'Var ' . strtolower($find) . ' not found in Test class.';
}
?>
答案 2 :(得分:1)
如果您知道属性总是小写,则接受的答案有效,从您的问题看起来您似乎没有(或者如果您已经知道它是EGG
,为什么要搜索egg
)
这将找到正确的属性,无论是上限,下限还是混合,$find
可以是上限,下限或混合:
Class Test {
public $egg = "yay";
}
$test = new Test();
$find = "EGG";
$vars = implode(',', array_keys(get_object_vars($test)));
if(preg_match("/^$find$/i", $vars, $match)) {
$prop = $match[0];
echo 'Var ' . $prop . ' found in Test class. Value: ' . $test->$prop;
} else {
echo 'Var ' . $prop . ' not found in Test class.';
}