0

我收到错误消息“致命错误:在第 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();

                ?>
4

3 回答 3

2

__call有两个下划线,没有一个。

http://www.php.net/manual/en/language.oop5.overloading.php#object.call

其他使用双下划线的“魔术”方法包括__set__get__isset和.__unset__callStatic

于 2013-02-08T02:52:52.013 回答
1

_call? 你的意思是__call?适当地更改您的函数名称,它应该可以工作。

另外,请查看https://github.com/jsebrech/php-o,它有巧妙的字符串。

于 2013-02-08T02:51:24.200 回答
0

再次查看代码后注意到公共函数 _call( $methodName, $arguments ) 没有双倍得分 __call( $methodName, $arguments )

对不起

于 2013-02-08T02:52:41.950 回答