0

言語とフレームワークを学ぶために、CakePHPアプリケーションに単純な回文問題を実装しました。私はすべてが機能していますが、説明できない奇妙な動作が1つあります。

__constructメソッドを持つPalindromeというクラスがあります。このクラスは、常に文字列である必要がある1つのパラメーターを受け入れます。ただし、Palindromeクラスのインスタンスを初めてインスタンス化するときは、__constructメソッドが2回実行され、最初に配列が渡されるときは、クラスへの参照のように見えます。私はこれを回避することができましたが、なぜそれが起こっているのか理解できません。誰かが私を啓発できますか?これが私のコードです:

クラスファイル:

class Palindrome {
    public $base_string = "";

    public function __construct($passed_string)
    {   
        print "==> $passed_string<br />";

        if(!is_array($passed_string))
        {
            $this->base_string = trim($passed_string);
        }
    }
}

コントローラー:

class PalindromesController extends AppController
{
    public $helpers = array('Html', 'Form');

    public function index()
    {

    }

    public function test_strings()
    {
        $string_array = explode("\n", $_POST["text_to_test"]);

        $string_index = 0;

        $palindrome_array = array();

        while($string_index < count($string_array))
        {
            $my_string = $string_array[$string_index];

            print "---> $lcString<br />";

            array_push($palindrome_array, new $this->Palindrome(strtoupper($my_string)));
            $string_index = $string_index + 1;
        }

        $this->set("palindrome_array", $palindrome_array);
    }
}

入力"foo\ nbar \ nbaz"は、この出力を生成します-

---> foo 
==> Array
==> FOO 
---> bar 
==> BAR 
---> baz
==> BAZ

これは、PHP5.3.15を使用したCakePHP2.2.3です。

4

1 に答える 1

0

あなたが持っているnew $this->Palindrome(...)

  1. $ this->回文はまだ存在しないため、ケーキが自動的に作成します。
  2. new(Palindromeのインスタンス)は、Palindromeの別のインスタンスを作成します。

コントローラからは$this->Model、シングルトンのように動作します。自動的に作成され、データソースへのデータの読み取り/書き込みに数回使用できます。たとえば、同じModelオブジェクトがこのコードブロック全体で使用されます。

$record1 = $this->Model->findById(4);
$record2 = $this->Model->findById(5);
$this->Model->create(array(/*...*/));
$this->Model->save();
于 2012-11-30T19:43:06.390 に答える