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

__call1つではなく、2つのアンダースコアがあります。

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 に答える