Работают ли эти подчеркнутые PHP когда-либо? - PullRequest
0 голосов
/ 08 сентября 2011

Унаследовал старый сайт 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();
}

1 Ответ

1 голос
/ 08 сентября 2011

Я надеялся узнать, применимо ли к этой ситуации какое-то соглашение, но из тестирования я обнаружил, что функции не вызваны, что действительно является ответом на вопрос, который я задал.

...