Функция внутри метода

auditseo

Новичок
Добрый день! Как правильно спроектировать код в ООП стиле.

Поместить функцию внутрь метода, к примеру вот так:
PHP:
class MyClass {
    public function calcSize ($length) {
    function makeSomething($lenght){
        ...
        }
        ...calc something...
        $important_value = makeSomething($length);
        ...calc something...
        return $some_variable;
    }
}
или функции function makeSomething($lenght) вынести в отдельный приватный метод, то есть вот так:

PHP:
class MyClass {
    private function makeSomething($lenght){
        ...
        }
    public function calcSize ($length) {
        ...calc something...
        $important_value = makeSomething($length);
        ...calc something...
        return $some_variable;
    }
}
Функции внутре методов понравилось делать после JS, там весьма удобно удобно все реализовывется. Прошу просвятить меня, как правильно делать.
 

auditseo

Новичок
А какая собственно стоит задача?
Создать объект, которые делает следующее:
- принимает POST запрос от клиента, обрабатывает его и формирует свой GET запрос на другой сервер и отправляет его, ответ от того сервера парсит и создает JSON и отправляет клиенту.

Так как я на php не программировал, стоит вопрос это норма, что функции внутри методов либо все такие функции делать как приватные методы?
 

auditseo

Новичок
А какая собственно стоит задача?
Вот к примеру с внутренне function: https://3v4l.org/cT4v8
PHP:
<?php
class MyClass {
    public function calc($a){
        function some($b){
           
            return ($b * 3);
        }
        $c = some($a) * 2;
        return $c;
    }
}

$test = new MyClass();
$saveValue = $test->calc(10);
echo $saveValue;
Либо функция вынесена в приватный метод: https://3v4l.org/1ItNm
PHP:
<?php
class MyClass {
    private function some($b){
            return ($b * 3);
        }
    public function calc($a){
        $c = $this->some($a) * 2;
        return $c;
    }
}

$test = new MyClass();
$saveValue = $test->calc(10);
echo $saveValue;
 

badmovie

Новичок
Лучше использовать приватный метод - он позволит вызвать его при необходимости в других методах класса. И приватность гарантирует, что данный метод будет вызван только в методах данного класса.
 

AmdY

Пью пиво
Команда форума
напиши юнит тесты и поймёшь как правильно.
 

badmovie

Новичок
С функцией все заметно веселее
PHP:
class Test{
        function test1()
              test3();
        }

        function test2(){
                function test3(){
                        echo "123";
                }
                test3();
        }
        function test4(){
                test3();
        }
}

$test = new Test;
$test->test1(); // Генерирует ошибку вида PHP Fatal error:  Call to undefined function test3()
$test->test2();
$test->test4();
test3();
А при вызове
PHP:
$test = new Test;
// $test->test1();
$test->test2();
$test->test4();
Функция благополучно исполняется. Это некорректное поведение, которое может привести к проблемам, да и к тому же, нарушает инкапсуляцию.
 

auditseo

Новичок
С функцией все заметно веселее
PHP:
class Test{
        function test1()
              test3();
        }

        function test2(){
                function test3(){
                        echo "123";
                }
                test3();
        }
        function test4(){
                test3();
        }
}

$test = new Test;
$test->test1(); // Генерирует ошибку вида PHP Fatal error:  Call to undefined function test3()
$test->test2();
$test->test4();
test3();
А при вызове
PHP:
$test = new Test;
// $test->test1();
$test->test2();
$test->test4();
Функция благополучно исполняется. Это некорректное поведение, которое может привести к проблемам, да и к тому же, нарушает инкапсуляцию.
Спасибо, за прекрасный пример.
 
Сверху