Chance
Themenersteller
Programmierer
Guru (173 Beiträge)

Abfragefrage defined

am 28.01.2013, 09:41 Uhr eröffnete Chance folgenden Thread
PHP & MySQL    1710 mal gelesen    6 Antwort(en).

Ich habe mal eine (wahrscheinlich dämliche) Frage:
Was ist der Unterschied (von der Geschwindigkeit und der Genauigkeit mal abgesehen) zwischen folgenden Abfragen:
!definded('DEBUG') und defined('DEBUG') === false

Lt. einem Kollegen verursachet die zweite Variante "Logikprobleme in anderen Applikationen".

Nach meiner Kentnis nach sollten beide Möglichkeiten das selbe Ergebnis liefern, da der Rückgabewert Bool ist.


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 28.01.2013, 18:33 Uhr schrieb joerg

Hallo

Das wäre jetzt ein Unterschied der mir einfallen würde. Der Kollege hat das aber sehr interressant ausgedrückt mit dem Term Logikprobleme.


<?php
define("CONSTANT1", "");
var_dump((bool) !CONSTANT1);
var_dump((bool) (CONSTANT1===false));
define("CONSTANT2", 0);
var_dump((bool) !CONSTANT2);
var_dump((bool) (CONSTANT2===false));
define("CONSTANT3", false);
var_dump((bool) !CONSTANT3);
var_dump((bool) (CONSTANT3===false));
?>


Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 28.01.2013, 19:34 Uhr schrieb romacron

Beides ist auf Bool gecastet
NOT spart ein paar Zeichen.
defined liefert ohnehin einen bool Parameter zurück
So ist es unsinnig mit === false zu testen

es reicht vollkommen


<?php

if(defined(\'some\')){
//already exists
}

if(!defined(\'some\')){
// define here
}


?>


die ===false expression ist somit total sinnlos


Chance
Programmierer
Guru (173 Beiträge)
am 29.01.2013, 14:13 Uhr schrieb Chance

@joerg:

Es geht nur darum, on die Kostante definiert ist.

@romacron:

Es geht darum zu testen, ob die Konstante nicht vorhanden ist.
Deshalb halte ich === false nicht für sinnlos.

Es geht darum, ob beide Funktionen das selbe bewirken.


romacron
JDev Xer
Content Gott (1224 Beiträge)
am 29.01.2013, 17:59 Uhr schrieb romacron

Hallo Chance,

in der Tat, beide Vergleiche führen zum selben Ziel.

Ohne mich in deinen ProgrammierStil einmischen zu wollen(was ich sicher mache)
Das ist die Lösung(alles andere hat zu viel Rüschen und Schleifchen)

<?php
if(!defined(\'some\')){
// define here
}
?>


seitenreport
Avatar seitenreport
Inhaber
TYPO3 Senior Developer
Content Gott (1771 Beiträge)
am 30.01.2013, 12:34 Uhr schrieb seitenreport

Chance schrieb:

Nach meiner Kentnis nach sollten beide Möglichkeiten das selbe Ergebnis liefern, da der Rückgabewert Bool ist.


Ja, der Vergleichsoperator === prüft, ob die Variablen gleich und vom selben Typ (also identisch) sind.

Der Rückgabewert von defined ist ein Boolean (true / false), somit ist der Typ bei Deiner Abfrage identisch.

!defined und defined===false machen damit keinen Unterschied in der Programmlogik.

Beste Grüße,
Matthias


SEO Analyse und Website-Check mit Seitenreport

Chance
Programmierer
Guru (173 Beiträge)
am 30.01.2013, 18:19 Uhr schrieb Chance

Der Grund, warum ich doppelte Genauigkeit verwende, anstatt der NOT Abfrage ist die (alseits beliebte) Mikrooptimierung von PHP:
floern.com/webscripting/geschwindigkeit-von-php-scripts-optimieren

Daher ist der Quellcode ein wenig umständlicher als nur mit NOT.
Und zur Mikrooptimierung ansich: Kleinvieh macht auch Mist


  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5267 Themen und 36089 Beiträge.
Insgesamt sind 48169 Mitglieder registriert.