CakePHP __construct用数组执行

时间:2012-11-30 19:29:31

标签: php cakephp cakephp-2.0

我在CakePHP应用程序中实现了一个简单的回文问题来学习语言和框架。我有一切工作,但有一些奇怪的行为,我无法解释。

我有一个名为Palindrome的类,带有__construct方法,它接受一个参数,该参数应该始终是一个字符串。但是,第一次实例化Palindrome类的实例时,__construct方法执行两次,并且第一次传入一个数组,这似乎是对该类的一些引用。我已经能够解决这个问题,但我不明白为什么会这样。任何人都可以开导我吗?这是我的代码:

班级档案:

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

这是使用PHP 5.3.15的CakePHP 2.2.3。

1 个答案:

答案 0 :(得分:0)

您有new $this->Palindrome(...)

  1. $ this-&gt; Palindrome尚不存在,因此蛋糕会自动为您创建。
  2. new(Palindrome的实例)创建了另一个Palindrome实例。
  3. 来自控制器$this->Model的行为有点像单身人士。它会自动创建,然后您可以多次使用它来读取/写入数据源的数据。例如,在整个代码块中使用相同的Model对象:

    $record1 = $this->Model->findById(4);
    $record2 = $this->Model->findById(5);
    $this->Model->create(array(/*...*/));
    $this->Model->save();