2011-08-29 80 views
3

我現在有點困惑......在CakePHP文檔中,它指出PHP的可見性可以替換爲:private__protected_。但是做必要的替換,並且從另一個類中調用private方法會導致該方法的執行沒有任何限制。我錯過了什麼?CakePHP方法可見性

+0

您是在控制器還是模型中設置這些私有方法?因爲命名約定只能在控制器上工作,據我所知。此外,我相信它只適用於有人試圖從URL訪問它,如www.example.com/controller/_protectecAction – 8vius

+0

我設置他們在一個模型,但如果他們只爲URL訪問工作,爲什麼會有一個'保護'和'私人'等價? – linkyndy

+0

我不知道,這只是蛋糕的工作方式,如果它的模型只是設置爲私有的,並且保護它,因爲_只適用於控制器 – 8vius

回答

3

如果你在模型中設置它們,只需要使用private和protected的_和__僅控制器操作

+0

但它沒有任何意義。爲什麼它只能用於控制器?另外,在某些情況下,無處指定'_'和'__'被限制或「工作」... – linkyndy

+0

從食譜:http://book.cakephp.org/view/904/Controller-Conventions 它說在那裏,_和__用於拒絕外部訪問,但允許內部使用 – 8vius

+0

因此,根據這樣的我說你可以使用私人和保護標籤爲您的方法和變量,因爲你會正常使用它們,因爲_和__只是CakePHP的約定,並不代表私有和受保護 – 8vius

2

下劃線只對控制器的方法有效的工作,因爲用戶無法訪問。在Cake應用程序中,它實際上只是一個約定。此外,我不認爲這是一個問題:你只需要從外面鎖上你的房子,如果你是唯一的門,你不需要鎖住每扇門。如果你想實現那個使用privateprotected PHP關鍵字。

+0

然後我會使用'private'和'protected'關鍵字。謝謝! – linkyndy

2

使用_和__表示受保護的resp。私有方法是CakePHP約定,因爲CakePHP(高達v1.3.x)仍然是PHP4框架,而PHP4沒有protectedprivate關鍵字。這意味着,即使您以這種方式爲您的方法名添加前綴,但就PHP而言,它們仍然是公共方法。

在您的應用程序中,我將遵循即將推出的CakePHP 2所使用的方法:將命名約定與各自的可見性關鍵字一起使用。例如,一個私有方法將被定義爲private function __myPrivateMethod()

+0

謝謝你的提示。我會這樣做,因此準備CakePHP 2。 – linkyndy