Унаследовал старый сайт CakePHP, и я пытаюсь выяснить, что делают некоторые функции.У меня есть несколько функций, которые имеют то же имя, что и другая функция, но с первым подчеркиванием, например, save()
и _save()
.Однако функция _save()
никогда не вызывается ни в каком контексте, хотя save()
есть.
Я прочитал этот вопрос , и похоже, что это из старого упражнения с худшими практиками, но этона самом деле не объясняет, почему это в моем коде;Вы все еще должны назвать function _save()
как _save()
правильно?Если нет звонков на _save()
, это безопасно удалить?
Я хочу, чтобы этого не было, даже функции save()
там не должно было быть, переписав совершенно хорошую функциональность фреймворка.Это похоже на более старую версию той же функции, но там нет комментариев, и я не знаю, есть ли какой-то странный контекст, в котором php / Cake вернется к подчеркнутому имени функции.
Вот код длялюбопытныйПри ближайшем рассмотрении кажется, что подчеркнутые функции были по какой-то причине старыми версиями функции.По крайней мере, один из них был вызван «закрытым» методом (из публичной функции с тем же именем, за исключением символа подчеркивания ...):
function __save() {
$user = $this->redirectWithoutPermission('product.manage','/',true);
if ($this->data) {
$this->Prod->data = $this->data;
$saved_okay = false;
if ($this->Prod->validates()) {
if ($this->Prod->save()) $saved_okay = true;
}
if ($saved_okay) {
$product_id = ($this->data['Prod']['id']) ? $this->data['Prod']['id'] : $this->Prod->getLastInsertId();
if ($this->data['Plant']['id']) {
$this->data['Prod']['id'] = $product_id;
$this->Prod->data = $this->data;
$this->Prod->save_plants();
$this->redirect('/plant/products/'.$this->data['Plant']['id']);
} else {
$this->redirect('/product/view/'.$product_id);
}
die();
} else {
die('did not save properly');
}
} else {
die('whoops');
}
}
function save() {
$user = $this->redirectWithoutPermission('product.manage','/products',true);
if ($this->data) {
$this->Prod->data = $this->data;
if ($this->Prod->validates()) {
$this->Prod->save();
$gotoURL = isset($this->data['Navigation']['goto'])?$this->data['Navigation']['goto']:'/';
$gotoURL = str_replace('%%Prod.id%%', $this->data['Prod']['id'], $gotoURL);
if (isset($this->data['Navigation']['flash'])) {
$this->Session->setFlash($this->data['Navigation']['flash']);
}
if (isset($this->params['url']['ext']) && $this->params['url']['ext']=='ajax') {
$value = array(
'success'=>true
,'redirect'=>$gotoURL
);
print $this->Json->encode($value);
} else {
$this->redirect($gotoURL);
}
} else {
$value = array(
'success'=>false
,'message'=>"You have invalid fields."
,'reason'=>'invalid_fields'
,'fields'=>array(
'Prod'=>$this->Prod->invalidFields()
)
);
print $this->Json->encode($value);
}
} else {
$this->redirect('/products');
}
die();
}