allgemeine fragen zu PHP - anfänger aufgepasst!

virus

Grünschnabel
im laufe der zeit tauchten einige Fragen (2 - mehr fallen mir jetzt nicht ein, da ich gerade von einer party komme :{}) auf, und zwar

wo liegt der unterschied zwischen
PHP:
if(!$action){
  $action = "view";
  }
und
PHP:
if(!isset($action)){
  $action = "view";
  }
?? das 1. heißt wenn nicht $action, dann... und das 2. wenn $action nicht "gesetzt" wurde, dann...
Also meine frage: "Was empfehlt ihr wo zu verwenden, am besten mit einer kleinen begründung.

2. Frage
wo liegt der unterschied zwischen
PHP:
echo "Mein Name is $user und ich wohne in $ort";
und
PHP:
echo "Mein Name is".$user."und ich wohne in".$ort;
mit anderen worten, könnte mir mal einer erklären, was genau die PUNKTE bewirken?

die 3. Frage fällt mir bestimmt erst morgen wieder ein %) ....

NE! *sorry*
der unterschied zwischen 'include' und 'require', wobei include eigentlich karl sein sollte, aber was genau bezweckt 'require' ?

OK, ich wäre für jede antwort dankbar!
THX
 
Zuletzt bearbeitet:
zur ersten frage:
isset() - ähnlich wie empty() - prüft einfach, ob eine variable existiert. bei so ziemlich allen datentypen mit ausnahme von booleschen werten (true/false) hat man dadurch eigentlich keinen vorteil.
es ist einfach so, dass eine variable ja durchaus existieren kann, aber einfach den wert false enthält. in dem fall würde
Code:
if (!$var)
erfüllt sein.
Code:
if (!isset($var))
allerdings nicht. ist sicher geschmackssache, obwohl die methode mit isset() sicher eindeutiger ist.

zur zweiten frage:
der punkt zwischen den elementen ist der operator zum verbinden von strings. im prinzip kann man genau so gut die variable mit in die string-konstante schreiben, aber das ist kein sonderlich sauberer programmierstil. ausserdem gibt's bei arrays mit string-elementen probleme bei der ersten methode.

falls noch was fehlt, erklärt kojote das bestimmt genauer. :)
 
jo danke!

und jetzt mal ne frage, die ich so nicht in der fachliteratur vorfinden konnte: aus welchem grund wird der buchstabe "i" als variable für konstant steigend/fallende werte genommen? theoretisch gige ja auch alles andere... gibts irgendwo ne liste für sowas, oder hat sich das einfach "eingebürgert" und es gehört ganz einfach zum sauberen programmieren?

hier ein beispiel von Dunsti (siehe turorials --> "[PHP/ MySQL] Ausgabe eines Gästebuchs auf mehrere Seiten verteilen"

PHP:
if ($page>0) {
    $i=$page-1;
    echo "<A HREF=\"guestbook.php?page=$i\">&lt;previous</A>";
}
for($i=0; $i<=$seiten; $i++) {
    if ($i==$page) {
        echo $i."&nbsp;";
    }
    else {
        echo "<A HREF=\"guestbook.php?page=$i\">$i</A>&nbsp;";
    }
}
if ($page<$seiten) {
    $i=$page+1;
    echo "<A HREF=\"guestbook.php?page=$i\">next&gt;</A>";
}
 
also prinzipiell

bleibt es jedem selbst überlassen
aber, wie du schon richtig vermutest,
hat sich $i als Counter eingebürgert.

Vielleicht von Integer vielleicht
auch irgend eine abstruse Tradition.

Gruß,
Jona
 
Original geschrieben von virus
2. Frage
wo liegt der unterschied zwischen
PHP:
echo "Mein Name is $user und ich wohne in $ort";
und
PHP:
echo "Mein Name is".$user."und ich wohne in".$ort;

mit anderen worten, könnte mir mal einer erklären, was genau die PUNKTE bewirken?

also es gibt zwei verschiedene methoden strings zu definieren:

PHP:
<php
   echo "Ich bin ein String";
   echo 'Ich bin ebenfalls ein String';
php>

Der unterschied bei den beiden liegt beim parsing der variablen. bei "" kann man eine var (keinen array aufruf!) einfach plain dazwischen schreiben "text $var mehr text".

bei '' muss man die variablen mit punkten mit dem string verbinden: echo 'text'.$var.'mehr text';(echo $var1.$var2; geht übrigens auch)

folgendes geht also:

PHP:
echo "Lalalala $var lalalaa";
echo "Lalalala".$var."lalala";
echo 'Blubbla'.$var.'nananapopa';

echo "String".$var;
echo 'String'.$var;

Folgendes geht nicht:

PHP:
echo 'Blablabla $var Bla';
echo 'blabala '$var' blalbla'; // da nicht durch punkte verknüpft -> string vorzeitig unterbrochen -> parse error
echo "blaaa "$var" popaa"; // so.

Wie man sieht ist die schreibweise "test $var test" für einen string nur eine nettigkeit der php entwickler um dem user arbeit zu ersparen, und den code übersichtlich zu halten.

wann du was einsetzt musst du aus der situation sehen (zum beispiel viel html code, der zeilen wie attribut="wert" enthält: besser '' einsetzen, damit nicht alle "s auskommentiert werden müssen)

anstatt eines punktes kannst du glaube ich auch kommata benutzen glaube ich, bin aber nicht mehr sicher. (sieht eh ******** aus :))

Original geschrieben von virus
der unterschied zwischen 'include' und 'require', wobei include eigentlich karl sein sollte, aber was genau bezweckt 'require' ?

OK, ich wäre für jede antwort dankbar!
THX

der text der mit require eingebunden wird, wird direkt vor dem parsen der eigentlichen datei geholt.

PHP:
<?php

if(1 < 0){
require("text.inc.php");
}
?>

hier würde der text eingebunden, obwohl die schleife nicht durchlaufen wird.

also wenn etwas wirklich unbedingt und IMMER geholt werden soll-> require

wenn das holen von irgendwelchen faktoren abhängig ist, die dynamisch sind -> include

hoffe geholfen zu haben.

b.
 
Zuletzt bearbeitet:
require vs. include
Der Unterschied liegt hierbei ganz schlicht darin, wie das Script mit einer nicht vorhandenen Datei umgeht.
Bei require() wird das Script sofort abgebrochen. Ein inlcude() wirft zwar auch einen Fehler aus, das Script wird aber weiter ausgeführt.

isset()
Wie schön erwähnt, prüft isset() ob eine Variable überhaupt gesetzt wurde. Diese Funktion solltest du unbeding in jedem if-Konstrukt anwenden, wenn die zu prüfende Variable nicht existieren könnte. Genaueres dazu später.

!$var überprüft im Endeffekt NUR, ob die Variable (boolean) FALSE ist.
!$var entspricht also prinzipiell $var === false

Hat $var also den Wert 0, sollte die Bedingung eigentlich nicht erfüllt sein. 0 ist zum einen ein Integer und zum anderen was ganz anderes als FALSE. PHP handhabt das allerdings etwas anders. Aufgrund des automatischem type-castings "wandelt" PHP intern die 0 (integer) in ein false (boolean) um, woduch die Bedingung wieder erfüllt ist. Gleiches gilt für einen leeren String "".

!$var ist also bei folgenden Werten, die eine Variable annehmen kann erfüllt:
  • false
  • 0
  • 0.0
  • ""

Nun nochmal zurück zum isset().
Nehmen wir also an, du hast eine Variable mit dem Inhalt 0 (integer).
!isset($var) würde hierbei nicht erfüllt sein, wohingegen !$var erfüllt wäre.
=> Die Variable ist gesetzt, enthält aber den Wert 0, was PHP in ein FALSE umwandelt.

Strenggenommen wäre es zudem falsch ein !$var auf eine nicht gesetzte Variable anzuwenden. Schließlich wird hierbei überprüft, ob $var den Wert false enthält. Ein nicht gesetzte Variable kann aber garkeinen Wert enthalten.
PHP erzeugt hierbe auch einen Notice-Fehler, der dich auf genau diesen Widerspruch hinweist. (Typischerweise werden Notices allerdings unterdrückt, wodurch einem solche Dinge nicht auffallen.)

"" vs. ''
Der Hauptunterschied besteht darin, dass bei Verwendung von "" alle PHP-Variablen innerhalb der double-ticks interpretiert werden und bei '' keine Variablen "ersetzt" werden.
Bei single-ticks bist du also auf Konstrukte á la echo 'muh' . $var . 'kuh'; angewiesen.
Ich persönlich bevorzuge die Variante mit den einfachen Anführungszeichen, da hierbei die doppelten Anführungszeichen nicht escaped werden müssen und man zudem einen besseren Überblich über die verwendeten Variablen erhält. In Punkto Geschwindkeit nehmen die beiden Variationen sich nicht viel. Bei der Verknüpfung würde ich hingegen immer den Punkt vorziehen und die Sache mit dem Komma schnellstmöglich vergessen.

So,

das war's für's Erste. Wenn noch Fragen bestehen, als her damit.

Greetings

André
 
Und was genau hat dich jetzt dazu bewegt, auf ein über drei Jahre altes Thema zu antworten?

Außerdem: „!$var entspricht also prinzipiell $var === false“ ist so nicht ganz richtig. !$var entspricht vielmehr $var == false (oder auch das logisch identische $var != true)
 
Ja sorry, hab einen Link zu diesem Thread in einem anderen Beitrag gefunden und hab dann nicht auf das Datum geschaut.

Und die Sache mit dem !$var entspricht $var === false, sollte nur verdeutlichen, was eigentlich hinter dem !$var steht. Es wird im engeren Sinne nämlich nur geprüft, ob die Variable false ist. Lediglich aufgrund des automatischen Type-Castings wandelt PHP Werte wie 0 ode "" zuerst in false um, wodruch !$var im Endeffekt dann natürlich eher mit $var == false gleichzusetzen ist. Mir ging's dabei einfach nur um den Hintergrund, dass nur aufgrund der Variablentypunempfindlichkeit von PHP dieses !$var so weit verbreitet ist.

PS
Außderm war's gestern schon sehr spät. ;)
 
n00ne hat gesagt.:
In Punkto Geschwindkeit nehmen die beiden Variationen sich nicht viel.

"nicht viel" stimmt zwar, aber man koennte erwähnen, daß der Single Quote eigentlich weniger Zeit braucht, da er nicht so aufwendig geparset wird, wie der double quoted.
 

Neue Beiträge

Zurück