如何检测类或方法名称是否包含多个单词?

时间:2014-04-29 16:50:54

标签: php zend-framework

以前曾提出过类似的问题,但这个问题有所不同。

我正在使用Zend Framework 1.12,我需要检查一个类或方法名称包含多少个单词。

I.e. "helloWorld" contains 2 words and "hello" contains 1 word.

现在这就是我正在做的事情。

$inflector = new Zend_Filter_Inflector(':class');
$inflector->setRules(array(
     ':class' => array('Word_CamelCaseToUnderscore')
));
//This will return Hello_World
$className = ucfirst($inflector->filter(array('class' => $className))); 

$names = explode("_", $className);
if(count($names) > 1){
   echo 'multiple words';
} else {
   echo 'single word';
} 

有更好的方法吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我喜欢你的解决方案 为了好玩,我可以建议您创建自己的过滤器 在我的库Doydoytools中,我创建了此过滤器Doydoytools/Filter/Word/CounterWords.php

class Doydoytools_Filter_Word_CounterWords extends Zend_Filter_Word_CamelCaseToUnderscore
{
    public function filter($value)
    {
        return count(explode($this->_separator, parent::filter($value)));
    }
}

所以对于班级Application_Plugin_PSession

$inflector = new Zend_Filter_Inflector(':class');
$inflector->setRules(array(':class' => array(new Doydoytools_Filter_Word_CounterWords())));
$count = $inflector->filter(array('class' => __CLASS__));

结果为4您的方法名称为Application_Plugin_P_Session

答案 1 :(得分:0)

我写了这样的代码:

function getMethodByField( $field )
    {
        $result = '';
        if( !empty($field) ) {
            $method = '';
            $strMethodArr = explode('_', $field);
            foreach( $strMethodArr as $str ) {
                $method .= ucfirst( $str );
            }
            $result = $method;
        }
        return $result;

    }