查找具有strtolower的类中是否存在属性

时间:2014-02-28 15:17:23

标签: php string class properties foreach

如何检查类中是否存在属性并使用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

3 个答案:

答案 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.';
}

https://eval.in/107095

答案 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.';
}