2017-05-10 8 views
0

私は検索をstackoverflowにしましたが、何も見つかりませんでした。

実際、私はCakePHP 2.3フレームワークで開発者が行った「汚い」コードを取り直そうとしています。

私は自分自身の開発者ではありません、私はスイスのナイフのようなものです、私はいくつかのPHPを行うが、これは通常私の毎日の仕事ではありません。

:)

例...私は機能を持つコントローラ、およびこれらの機能の下にいくつかの機能を持っている、のは事実へ行こう:

tool_controller.php
function addSomething(){ 

    print_r($this->loadModel("db")); //it works // returns 1 

     function anotherFunction(){ 

     print_r($this->loadModel("db")); //returns "Using $this when not in object context"  

     } 
} 

私は少し紛失して、CakePHPのドキュメントで検索しましたが、何も見つかりませんでした。

誰かが助けてくれますか?

おかげ

+3

なぜ機能を入れ子にしますか?あなたの例では意味がありません。 'anotherFunction'をクラスのメソッドにしてください。そうしたいのであれば、その問題を示す完全な(動作しない)例を表示してください。現在のところ、これらの関数がどのように呼び出されているのかわかりません。 –

+0

1つの関数がネストされるのはなぜですか?関数は互いに "隣"またはクラスのメソッドとして宣言する必要があります。 –

+0

最初の関数は送信フォームの結果であり、同じコードが古い開発者によって何度も繰り返されていたので、私はこのコードを繰り返す代わりにコールバックする関数を作成しました。私がCakePHPから "loadModel"を呼び出すまでは、すべて正常に動作します。 –

答えて

0

私は私の関数をコールバックした後、あなたの多くは、ネスト関数に、私はあなたのアドバイスに従うことを決めましたではないし、私は私の主な機能の外パットきた私を提案した後、 。

Public Function loopAction(){ 

    //Code here 

} 

Public Function addsomething(){ 

    //Code here 

    $this->loopAction(); 

} 

すべてのおかげで、以前より完全に、さらにはさらに優れています。

1

このコードは、おそらくより良い、このように書かれます: -

public function addSomething(){ 
    print_r($this->loadModel("db")); 
    $this->_anotherFunction();  
} 

protected function _anotherFunction(){ 
    print_r($this->loadModel("db")); 
} 

私はあなたが本当にあなたが達成したいもののために巣機能に必要疑います。上記のコードは、読むのが簡単であり、文脈$thisが何を指しているのかがより明白です。

0

OKの人は、主な機能が送信後にアクションとなる前に言ったように、私の問題を解決しました。そして、データを処理するためにこの関数内にループがありました。

私はCakePHPで作業していて、統合された関数(この場合は "Controller"クラスの関数 "loadModel")を使用しているので、この関数を入れ子関数で動作させる必要がありました。あなたの提出のためのすべての

function addSomething(){ 

    my_code_here 

    function anotherFunction(){ 

     $controller = new Controller; // Had to redeclare the class 

     print_r($controller->loadModel("db")); // Works just fine 

    } 

}

ありがとう:

ソリューションは、以下の通りでした。

親切な人々について;)

+0

これは本当に良い考えではなく、CakePHPのやり方ではありません。私はこのようなネストされたPHP関数を使う必要があることを非常に疑う。 – drmonkeyninja

+0

だから、あなたは決して関数を入れ子にしないと言っているのですか? –

+0

クローズを使用する以外の方法ネストされた関数を使用したことは一度もありません。オブジェクト指向のコード(CakePHPなど)を書くときにPHPの必要がないからです。 – drmonkeyninja

関連する問題