使用php重载_call时获取错误消息

时间:2013-02-08 02:48:44

标签: php

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

                ?>

3 个答案:

答案 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)

抱歉