以前曾提出过类似的问题,但这个问题有所不同。
我正在使用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';
}
有更好的方法吗?
提前感谢您的帮助。
答案 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;
}