Normal local variable declaration
function Sum() { $locvar = "bla" //scope's local variable }
$a = 1; //global var $a = 2; //global var function Sum() { global $a, $b; //reference to the global vars $b = $a + $b; //produce 3 }
⇒ us used to get values in arrays
$creator['Toilet'] = "Crapper"; $creator = array('Light bulb' => 'Edison', 'Rotary Engine' => 'Wankel', 'Toilet' => 'Crapper');
or to retrieve objects values
class Person { var $name = "Fred"; var $age = 35; } $o = new Person; $a = (array) $o; print_r($a); Array ( [name] => Fred [age] => 35 )
The double dollar sign declares that the value of $a should be used as the name of newly defined variable.
For example, the code below creates a variable called $hello and outputs the string “world”
<?php $a = 'hello'; $$a = 'world' echo $hello; ?>
<?php $a = 'hello'; $$a = 'world'; echo "$a ${$a}"; //produces hello world echo "$a $hello"; //produces hello world ?>
Is for declaring class member variables.
class foo { var $x = 'y'; function bar() { } }
Wenn du einen text, einen Dateipfad usw. als URL parameter übergeben musst - nutze vor dem Übergeben die Funktion rawurlencode:
$filename = "bibtexdata1 - Copy.bib"; $urlfilename = rawurlencode ( $filename ); // bibtexdata1%20-%20Copy.bib
und am anderem Ende
$filename = rawurldecode ( $urlfilename );
Details about the syntax can be read here
Kopier- vs. Referenzsemantik Beim Aufruf einer Methode kann man dieser - vorausgesetzt, diese erlaubt das - Parameter übergeben. Ist einer dieser Parameter ein Objekt, genauer: eine Referenz auf ein Objekt, so findet in PHP bei der Übergabe dasselbe Vorgehen statt wie bei gewöhnlichen Primitivtypen (Integer, Boolean, String): Es wird eine Kopie des ursprünglichen Datums, bei Objekten also eine Kopie der Referenz, erzeugt und übergeben. Da eine Referenz auf ein Objekt ja immer nur das Objekt bezeichnet, es aber nicht selbst darstellt, kann folglich keine Methode das ursprüngliche Objekt (z.B. mit NULL) überschreiben. Auch in Java, wo bei Objekten statt der Kopiersemantik die sog. Referenzsemantik zum Einsatz kommt[*], funktioniert dies nicht. Der Unterschied zwischen Java und PHP in der Behandlung von Objekten kommt erst dann zum Tragen, wenn versucht wird, den Wert eines Objekt-Attributes zu ändern. Während Java innerhalb einer aufgerufenen Methode nämlich tatsächlich das Attribut sowohl der übergebenen als auch der ursprünglichen Referenz auf das Objekt ändert, erfolgt dies bei PHP standardmäßig nur auf der Referenzkopie, die lokal in der Methode sichtbar ist.
Grundsätzlich ist es natürlich immer möglich, mittels einer return-Anweisung die lokale Referenz zurückzugeben und der ursprünglichen Objektvariable zuzuweisen.
Ausweg aus dem Referenzdilemma Wie also kann man sicherstellen, daß eine Referenz auch als solche behandelt wird? In PHP gibt es dafür spezielle Syntax, bei der das Kaufmanns-Und den Referenz-Charakter einer Zuweisung oder einer Variablen-Betrachtung anzeigt:
$a = &$b; $c =& $a; $c = 42;
Die beiden obigen Zuweisung bewirken gleichermaßen, daß jeweils beide Variablen nicht nur denselben Wert haben, sondern auch eine Wertänderung einer der Variablen automatisch die exakt selbe Wertänderung der anderen Variablen bewirkt. Die letzte Anweisung bewirkt folglich, daß alle drei Variablen den Wert 42 annehmen.
Auch bei Funktions- und Methodenaufrufen wird normalerweise Kopiersemantik angewandt. Um explizit Referenzsemantik zu fordern, stellt man hierbei bei einer Funktions-/Methodendefinition einer zu referenzierenden Parameter-Variablen ein Kaufmanns-Und voran:
function Plus($var) { $var++; } function Minus(&$var) { $var--; } $var = 42; Plus($var); Minus($var); echo $var;
Die Ausgabe obigen Codes ist natürlich 41, da nur die Funktion Minus den Wert der Variablen $var ändert. In Java wäre das nicht so offensichtlich, da hier u.U. eine Klassenvariable namens var existieren könnte, die implizit gemeint sein könnte. In PHP müßte man dann aber $this→var schreiben.
Manchmal ist es nötig, eine Methode einer Klasse aufzurufen, ohne ein Objekt derselben erzeugt zu haben. In diesem Fall kann man einen sogenannten ,,static``-Aufruf machen. Zu beachten ist dabei, daß eine so aufgerufene ,,Klassenmethode`` nirgends auf die Attribute der Klasse, in der sie sich befindet, zugreifen darf, da diese ja nur im Kontext einer Instanz (Objekt) vorhanden sind. Lokale und globale Variablen dürfen dagegen natürlich benutzt werden.
Ein primitives Beispiel:
class Auto { ... function Erfinder() { return "Etienne Lenoir, Carl Benz"; } ... } echo Auto::Erfinder();
Im Falle von Zugriffen auf geerbte, aber überschriebene Methoden sollte man statt des Klassennamens das Schlüsselwort parent benutzen. Dadurch taucht der Name der beerbten Klasse nur hinter extends auf, was das nachträgliche Vornehmen von Änderungen z.T. stark erleichtert. Außerdem wird dadurch auch der Unterschied zwischen ,,static`` (kein Objekt vorhanden) und normalem Instanz-Methodenaufruf deutlich.
Beispiel: Angenommen, wir hätten in der Klasse DSP_CR die Methode lenke(drehung) der Klasse Auto überschrieben, von der DSP_CR erbt. Will man nun innerhalb von DSP_CR auf die gleichnamige Methode der Basisklasse Auto zugreifen, kommt folgende Syntax zum Einsatz:
... function lenke($drehung) { // Servo aktivieren $drehung = $this->servo($drehung); // Methode der Basisklasse aufrufen parent::lenke($drehung); } ...
use the method to echo the variable's content
var_export($VARIABLE); $var = var_export($VARIABLE,true);
//To import a file and immediately print it - do require file.php; //To import a file into a variable - do: //getting variables by ob_start / ob_get_clean makes php evaluate the php in those files variables ob_start(); include($ROOT.'/templatesubs/zvg/toolbar.php'); $toolbar = ob_get_clean(); //To load a file as it is, without filling the variables $toolbar = @file_get_contents($ROOT.'/templatesubs/partners/toolbar.php');
This Page is about tips and fallpits while configurating PHP:
Problem: Find out, which User Account PHP uses, e.g. to grant permissions for a Folder.
<?php echo 'Name des Benutzers: ' . get_current_user(); ?>
sudo apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json
When including other files, they can't be refered relatively to the current dir. To do so use
define('__ROOT__', dirname(__FILE__)); $path = (__ROOT__ . '/relative/path.php');
*/20 * * * * /usr/bin/php -q -f /home/scripts/humblebundle/index.php > /dev/null