Zum Inhalt springen
ThreadPHP & MySQL

Abfragefrage defined

Kategorie
PHP & MySQL
Gelesen
1710
Antworten
6
Erstellt von: gelöschter BenutzerDatum: 28.01.2013, 09:41 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

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.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 1710 mal gelesen · 28.01.2013, 09:41 Uhr

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äge
gelöschter Benutzer
am 28.01.2013, 18:33 Uhr schrieb
Antwort

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

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

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

gelöschter Benutzer
am 29.01.2013, 14:13 Uhr schrieb
Antwort

@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.

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

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
am 30.01.2013, 12:34 Uhr schrieb seitenreport
Antwort

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
gelöschter Benutzer
am 30.01.2013, 18:19 Uhr schrieb
Antwort

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