Abfragefrage defined
Redaktionelle Einordnung
Diese archivierte Diskussion behandelt Abfragefrage defined aus Sicht der Rubrik PHP & MySQL.
CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.
Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.
Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.
Startbeitrag
Originaler Foreninhalt in modernisierter Darstellung.
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.
Antworten
6 BeiträgeHallo
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
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
@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.
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
}
?>
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
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