我收到错误消息'致命错误:在第41行调用未定义的方法CleverString :: strlen()
echo "<p>The length of the string is: " . $myString->strlen() . "</p>";
我已多次查看我的代码,但无法指出导致错误的原因。
以下是完整的代码:
<?php
class CleverString {
private $_theString = "";
private static $_allowedFunctions = array( "strlen", "strtoupper", "strpos" );
public function setString ( $stringVal ){
$this->_theString = $stringVal;
}
public function getString(){
return $this->_theString;
}
public function _call( $methodName, $arguments ){
if ( in_array( $methodName, CleverString::$_allowedFunctions ) ){
array_unshift( $arguments, $this->_theString );
return call_user_func_array( $methodName, $arguments );
} else {
die ( "<p>Method 'CleverString::$methodName' doesn't exist</p>" );
}
}
}
$myString = new CleverString;
$myString->setString( "Hello!" );
echo "<p>The string is: " . $myString->getString() . "</p>";
echo "<p>The length of the string is: " . $myString->strlen() . "</p>";
echo "<p>The string in uppercase letter is: " . $myString->strtoupper() . "</p>";
echo "<p>The letter 'e' occurs at position: " . $myString->strpos( "e" ) . "</p>";
$myString->madeUpMethod();
?>
答案 0 :(得分:2)
__call
有两个下划线,而不是一个。
http://www.php.net/manual/en/language.oop5.overloading.php#object.call
其他&#39;魔术&#39;使用双下划线的方法包括__set
,__get
,__isset
,__unset
和__callStatic
。
答案 1 :(得分:1)
_call
?你的意思是__call
?适当地更改你的功能名称,它应该可以工作。
另外,查看https://github.com/jsebrech/php-o,它有聪明的字符串。
答案 2 :(得分:0)
再次忽略代码注意到公共函数_call($ methodName,$ arguments)没有得分双重__call($ methodName,$ arguments)
抱歉