Chance
Themenersteller
Programmierer
Guru (173 Beiträge)
Abfragefrage defined
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
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
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)
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)
@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)
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
}
?>
seitenreportInhaber
TYPO3 Senior Developer
Content Gott (1772 Beiträge)
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)
Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren