Cytat
Sprawdzilem to troche doglebniej i sie okazuje, ze po pierwsze:
Ustawienie w php.ini E_NOTICE lub nie, nie powoduje zadnej (poza granica bledu pomiaru) roznicy.
Dla ilu wynikow sprawdziles? Bo u mnie powoduje. Z bardzo naturalnej przyczyny - jesli mam wlaczone raportowanie NOTICE i sprawdzam if($x) to on musi wyswietlic X bledow (nie polaczonych ob wiec kazdy osobno) co spowalnia.
Cytat
Czasy zmieniaja sie jedynie jesli zmienia sie sam sposob sprawdzania zmiennej. I teraz dodatkowym atutem if ($x)
Zaraz! Stoj. Zdanie nielogiczne. Ja udowadnialem ze atutem if(isset($x)) jest szybkosc, zatem nie mozesz pisac ze "dodatkowym" atutem drugiej metody jest cos tam... wrrr..
Cytat
jest to, ze jest sprawdzane czy ta zmienna istnieje i czy jest rozna od "" (pusty string), wiec zeby osiagnac to samo kompatybilnie z E_NOTICE to trzeba by dac 2 warunki if(isset($x) && $x!="")
Jak napisal DayV - nie prawda. Co wiecej. Skoro poruszyles juz ta sprawe, to przy okazji masz jeszcze wieksza swiadomosc programistyczna autora... Zamiast olewac wszystko co sie dzieje - istnienie zmiennej lub jej nie istnienie, zrownywac booleanowe false z "",'',0 itp... zaczynasz ROZUMIEC co oznaczaja konkretne instrukcje ukryte w tym jezyku wysokiego poziomu. Zacytuje ulubionego Dijkstre:
Cytat
(...) z pewnoscia nie zadowoli ona tych, co trudnosc programowania utozsamiaja z trudnoscia przebieglego wykorzystywania zawilych barokowych konstrukcji zwanych "jezykami programowania wysokiego poziomu" i - co gorsze - "systemami programowania". Gdy poczuja sie oni oszukani tym, ze zignoruje wszelkie arabeski jezykowe, odpowiem im tylko: "Czy jestescie calkowicie pewni, ze te arabeski, te wszystkie cudowne ulatwienia zawarte w waszych "poteznych" jezykach programowania rzeczywiscie sluza rozwiazywaniu, a nie utrudnianiu zadan?"
Pozostaje mi tylko nadzieja, ze (...) zechca oni przeczytac moja ksiazke; uczyniwszy to, byc moze zgodza sie, ze nawet bez arabesek jezykowych pozostaje tak bogaty przedmiot studiow, iz watpic mozna, czy wiekszosc tych arabesek w ogule powinna byc wynaleziona
Ten facet napisal to 45 lat temu.... i prosze - jakie aktualne
Cytat
co powoduje ze czasy sie praktycznie zrownuja w przypadku, gdy zmiennej nie ma, albo
if($x) wyprzedza drugie konkurujace z nim

rozwiazanie dosc znacznie jesli zmienna jest, wiec
ten argument chyba wysiada ...
I znowu - sprawdzales?
ogolnie przedstawie wyniki moich testow, ktore nie zgadzaja sie z tym co piszesz. A poniewaz piszesz bez powolywania sie na testy mam podejrzenia, ze testow wogule nie wykonales, a w zamian oparles sie na swojej znajomosci mechanizmow dzialania php - jak zwykle zreszta w takiej sytuacji - zawodnie.
1) metoda A
[php:1:ef3e6184c1]<?php
$m=0;
for ($i=0;$i<10000;$i++ ){
if($x) {
$m=1;
}
}
?>[/php:1:ef3e6184c1]
2) metoda B
[php:1:ef3e6184c1]<?php
$m=0;
for ($i=0;$i<10000;$i++ ){
if(isset($x)) {
$m=1;
}
}
?>[/php:1:ef3e6184c1]
3) metoda C
[php:1:ef3e6184c1]<?php
$m=0;
for ($i=0;$i<10000;$i++ ){
if(isset($x)&&$x!="") {
$m=1;
}
}
?>[/php:1:ef3e6184c1]
4) metoda D
[php:1:ef3e6184c1]<?php
$m=0;
for ($i=0;$i<10000;$i++ ){
if(!empty($x)) {
$m=1;
}
}
?>[/php:1:ef3e6184c1]
a) metoda A przy 'E_ALL & ~E_NOTICE' - ~40 prob na sekunde (1 proba 24 milisekundy)

metoda A przy 'E_ALL' - dzialalo tak wolno, ze skrocilem ilosc prob do 10 - ~0.03 wywolan na sekunde! (1 proba okolo 33 sekund!)
c) metoda B przy 'E_ALL & ~E_NOTICE' - ~95 prob na sekunde (1 proba okolo 10 milisekund)
d) metoda B przy 'E_ALL' - ~95 prob na sekunde (1 proba okolo 10 milisekund)
e) metoda C przy 'E_ALL & ~E_NOTICE' - ~87 prob na sekunde (1 proba okolo 12 milisekund)
f) metoda C przy 'E_ALL' - ~87 prob na sekunde (1 proba okolo 12 milisekund)
g) metoda D przy 'E_ALL & ~E_NOTICE' - ~87 prob na sekunde (1 proba okolo 12 milisekund)
h) metoda D przy 'E_ALL' - ~87 prob na sekunde (1 proba okolo 12 milisekund)
Co z tego wynika? Po pierwsze redukujemy wyrazy podobne : (g==h && e==f && c==d) => jesli obslugujemy bez noticow, nie ma znaczenia czy NOTICY sa wlaczone czy nie - to logiczne.
Najwolniejsze (i dziwie sie ze Tobie wyszlo inaczej) - jest wyswietlanie noticow, czyli metoda A (test a). Jest tak niesamowicie wolny, ze na naszym testcase nie ma co go sprawdzac (33 sekundy na strone)
Nastepne w kolejnosci jest "ukrywanie prawdy" - wylaczamy raportowanie NOTICE i uzywamy metody A (test

.
Znacznie szybsze jest pelne kontrolowanie czy istnieje zmienna i czy nie jest pusta (jako dwa osobne wyrazenia) metoda C - to potwierdza moja teorie.
Porownywalna jest metoda D - z empty - daje Ci pelne mozliwosci jesli potrzebujesz sprawdzic zarowno istnienie zmiennej jak tez jej zawartosc (rzutowana na boolean). To znowu jest logiczne, bo ta metoda i metoda C sa rownowazne, przy czym empty jest krotsze w zapisie. Ma jeszcze jedna zalete, ktorej nie bralem pod uwage podczas testow - sprawdza takze czy (wiem - chore) tablica rzutowana na boolean jest T czy F.
Najszybsza jest metoda B z oczywistych wzgledow - sprawdzamy jedynie jeden warunek - istnienie zmiennej. I to jest najszybsze jesli potrzebujemy jedynie skontrolowac semafor istnieje/nie istnieje.
Jesli masz inne wyniki - prosze bardzo chetnie porownam.