2016-08-12 5 views
1

Я воспользовался лучшими практиками в следующей ссылке https://pear.php.net/manual/en/standards.bestpractices.php. Я до сих пор не совсем понимаю, что такое ранняя концепция возврата в PHP. Используется ли она для уменьшения условий отсутствия else в функции PHP? Когда мы должны в идеале использовать эту концепцию и почему она полезна?Какова концепция раннего возврата, полезная в PHP

+0

Да, это одна из причин использовать возвращение. Он может прекратить выполнение функции, когда определенное условие не выполняет свои требования. Он может сэкономить несколько строк и сделать ваш код более читаемым. Представьте, что вы выполняете 100 строк кода, когда '$ a == 2', но возвращаете false (ошибка) в' else' в строке 102. –

+0

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

ответ

0

Короткий пример, почему это может быть полезным

//some demo function 
function connect_to_ftp($host, $user, $pass){ 
    //some check if the host is a valid host, just for demonstration 
    if (not_a_valid_host($host)) return false; 
    //if the host is valid, continue executing, no else required 
    make_ftp_connection($host, $user, $pass); 
    return true; 
} 
1

Это очень грубо и упрощенно тест, но на PHP 7.0.2 test_func1() составляет 33% быстрее, чем test_func2():

<?php 
function test_func1() 
{ 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){return;} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
} 

function test_func2() 
{ 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    if(1===1){} 
    return; 
} 

$iterations = 1000000; 

$start = microtime(true); 
for($i=0; $i<$iterations; ++$i) 
{ 
    test_func1(); 
} 
echo (microtime(true)-$start)."\n\n"; 

$start = microtime(true); 
for($i=0; $i<$iterations; ++$i) 
{ 
    test_func2(); 
} 
echo (microtime(true)-$start); 

Попробуйте сами на http://sandbox.onlinephpfunctions.com/

Как я уже сказал, это упрощено. Представьте себе, что вместо этого функция позволяет нескольким вызовам базы данных сравнивать определенные значения. Если сравнение первого значения делает бесполезные обращения к последующим сравнениям, нет причин продолжать эти сравнения.

+0

Sry, но я на 1 миллионе итерации большой gab !, но с 10000 итерациями его можно игнорировать. И есть много других тингов, которые могут замедлить 1 Мил. iereation, например 'include' или' sql'. Посмотрите на скорость, хорошо, но с 1 Мил. ИТЭР. когда вы получаете более быстрое '===' (не '==') поле, которое выходит за рамки производственного кода, а не тестирует relvant. – JustOnUnderMillions

+0

@JustOnUnderMillions Вы решили 100% игнорировать оба моих парада открытия и закрытия? – MonkeyZeus

+0

Как я уже говорил, я каждый день импортирую огромные данные (от 1 ГБ до 3 ГБ на сценарий) с объемом до 100 ГБ в день. Перемещение XML, CSV и других данных в базу данных со сложной проверкой. И «возвращение ранней концепции» НЕ является узким местом. Но я решил теперь отметить это как мой последний комментарий здесь :) PP: 'почему это полезно' ?? 'Readability' !! И почему PHP7 в вашем ответе вообще ??? Это не вопрос:) 999 – JustOnUnderMillions

0

все о ЧИСТОЙ КОД readability

function bad($x,$y,$z){ 
if($x){ 
    if($y){ 
     if($z){ 
      /*code work*/ 
     } else { 
      return null; 
     } 
    } else { 
     return null; 
    } 
    } else { 
    return null; 
    } 
} 

function better(){ 
    if(!$x){ 
     return null; 
    } 
    if(!$y){ 
     return null; 
    } 
    if(!$z){ 
     return null; 
    } 
    /*code work*/ 
} 

function bestversioninthiscase(){ 
    if(!$x || !$y || !$z){ 
     return null; 
    } 
    /*code work*/ 
} 

не о ведьме кода запускается.

Sidenote: Есть так много способов для rome. И у него есть небольшая часть Pepsi VS. Cola.

Что более читаемым здесь:

if($x){ 
    #code 
} 

или

if($x) 
{ 
    #code 
} 

Весело обсуждать эту тему :)

Смежные вопросы