0

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

我有一个名为 Palindrome 的类,它有一个 __construct 方法,它接受一个参数,该参数应该始终是一个字符串。但是,我第一次实例化回文类的实例时,__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。

4

1 回答 1

0

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

  1. $this->Palindrome 还不存在,所以 cake 会自动为你创建它。
  2. new(回文实例)创建另一个回文实例。

来自控制器的$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 回答