2016-03-20 8 views
1

Ich versuche, in PHP Grundlagen besser zu werden, und ich habe diesen einfachen Test auf PHP 7.0.4 laufen:IF-Bedingungen, um in PHP wirklich ankommt

<?php 

    function am_I_executed(){ 
     echo "yes I am executed\n"; 
     return true; 
    } 

    echo "test1: \n"; 
    if (false && am_I_executed()) { 
     echo "this should never be displayed \n"; 
    } 

    echo "test2: \n"; 
    if (am_I_executed() && false) { 
     echo "this should never be displayed \n"; 
    } 

Das Ergebnis ist:

test1 
test2 
yes I am executed 

Bevor ich das versuchte, dachte ich, dass der Compiler würde einfach überspringen diese wenn Aussage, weil es immer falsch geben sollte, ist egal, was die Rückkehr von am_I_executed() und dass es keinen Unterschied zwischen test1 und test2

0 wäre

Ich war offensichtlich falsch.

Ich glaube, dass im wirklichen Leben Erfahrung es eine Situation wie diese passieren könnte:

if(algorithm1() && algorithm2()){} 

aber in mancher Gelegenheit könnte es schwierig sein, zu verstehen, welche der leichtere Algorithmus ist und dann entscheiden, in welcher Reihenfolge sie in der if-Anweisung aufgeführt sein.

Wie gehen Sie dieses Problem an?

+4

Siehe: http://StackOverflow.com/q/5694733/3933332 – Rizier123

+0

Ich glaube, dass die Bedingung von links nach rechts ausgewertet wird. Die "Test 1" ruft nicht das "am_I_executed()" auf, weil der Interpreter zuerst "false" findet. – frz3993

+0

@ frz3993 Ja, es scheint so, aber das bedeutet, dass die Reihenfolge in Bezug auf die Leistung wichtig ist. Was tun, wenn die ausgewerteten Algorithmen irgendwie gekapselt sind und ich keine Ahnung habe, welche schwerer? Ist das Testen die einzige Lösung? – wwr

Antwort

1

Ich denke, Sie sollten mehrere Ausführungszeiten zwischen zwei Algorithmen testen und berechnen und eine statistische Analyse ihrer Ausführungszeit durchführen, um zu entscheiden, welche leichter ist.

Ein anderer und schneller Weg ist, den Code dieser 2 Funktionen zu lesen und ihre Komplexität zu berechnen.

Die leichteste Komplexität (oder die kürzeste statistische Zeit) geht zuerst.

Verwandte Themen