PHP: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Kategorie:Sprache = Besonderheiten = * Assignment von Objekten speichert Kopie. Aber möglich Referenzzuweisung: $obj2 = &$obj; = Syntax = * switch() erl…“)
 
Zeile 4: Zeile 4:
* Assignment von Objekten speichert Kopie. Aber möglich Referenzzuweisung: $obj2 = &$obj;
* Assignment von Objekten speichert Kopie. Aber möglich Referenzzuweisung: $obj2 = &$obj;


= Syntax =
= Anweisungen =
* switch() erlaubt Strings als Marken.
* switch() erlaubt Strings als Marken.
* continue im switch ist wie break.
* continue im switch ist wie break.
* continue <level>: springt aus verschachtelten Statements (Schleifen + Switch)
* continue <level>: springt aus verschachtelten Statements (Schleifen + Switch)


= Typen =
= Klassen =
* Konvertierungen: string strval($expr) und integer intval($expr)
 
== Arrays ==
* sequentiell oder assoziativ:
* $a = array(1, 2); $b = array("a" => 1, "b" => 55);
* ab 5.4: $a = [1, 2]; $b = ["a" => 1, "b" => 55];
* Test: array_key_exists($array, $key) oder isset($arr[$key])
* array_push($array, $value) hängt an...
* count($arr) zählt Elemente (flach) oder rekursiv: count($arr, COUNT_RECURSIVE)
 
== Klassen ==
* Konstruktor der Basisklasse aufrufen:
* Konstruktor der Basisklasse aufrufen:
<pre>class Demo extends BaseDemo {
<pre>class Demo extends BaseDemo {
Zeile 18: Zeile 28:
}
}
</pre>
</pre>
 
* abstrakte Klassen:
<pre>
abstract class AbstractClass {
    abstract protected function getValue();
}
</pre>
== Traits ==
== Traits ==
Traits sind "Copy-Paste"-Klassenkonstruktionen, die anstatt von Mehrfachvererbung eingesetzt werden können.
Traits sind "Copy-Paste"-Klassenkonstruktionen, die anstatt von Mehrfachvererbung eingesetzt werden können.
Zeile 27: Zeile 42:


Definition:
Definition:
 
trait ExampleTrait {
  function doIt(){}
}
Benutzung:
Benutzung:
<pre>use ExampleTrait;
<pre>class Example {
  use ExampleTrait;
}
</pre>
Konfliktauflösung und Methoden-Umbenennung:
<pre>
trait A {
    public function smallTalk() { echo 'a'; }
    public function bigTalk() {  echo 'A'; }
}
trait B {
    public function smallTalk() { echo 'b'; }
    public function bigTalk() { echo 'B'; }
}
class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
        B::bigTalk as talk;
    }
}
</pre>
</pre>


== Generatoren ==
== Generatoren ==
Wie in Python: Einfache Umsetzung von iterierbaren Objekten.
Wie in Python: Einfache Umsetzung von iterierbaren Objekten.
<pre>function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        yield $i;
    }
}
</pre>
= Metaprogrammierung =
* string gettype($mixed), is_integer(), is_object(), is_bool(), is_array() isset()


== Metaprogrammierung ==
= Wichtige Funktionen =
* string gettype($mixed), is_integer(), is_object(), is_bool(), is_array()
* $mixed print_r($var, $doReturnString = false) gibt menschenlesbare Form der Variablen aus oder liefert diese als String
*

Version vom 8. Mai 2017, 10:14 Uhr


Besonderheiten

  • Assignment von Objekten speichert Kopie. Aber möglich Referenzzuweisung: $obj2 = &$obj;

Anweisungen

  • switch() erlaubt Strings als Marken.
  • continue im switch ist wie break.
  • continue <level>: springt aus verschachtelten Statements (Schleifen + Switch)

Typen

  • Konvertierungen: string strval($expr) und integer intval($expr)

Arrays

  • sequentiell oder assoziativ:
  • $a = array(1, 2); $b = array("a" => 1, "b" => 55);
  • ab 5.4: $a = [1, 2]; $b = ["a" => 1, "b" => 55];
  • Test: array_key_exists($array, $key) oder isset($arr[$key])
  • array_push($array, $value) hängt an...
  • count($arr) zählt Elemente (flach) oder rekursiv: count($arr, COUNT_RECURSIVE)

Klassen

  • Konstruktor der Basisklasse aufrufen:
class Demo extends BaseDemo {
   function __construct($name){
      parent::__construct ( $name );
   }
}
  • abstrakte Klassen:
abstract class AbstractClass {
    abstract protected function getValue();
}

Traits

Traits sind "Copy-Paste"-Klassenkonstruktionen, die anstatt von Mehrfachvererbung eingesetzt werden können.

  • Keine Instantiierungen
  • Statische Elemente sind in jeder Anwendungsklasse extra instantiiert.
  • Ausblenden/Umbenennen von Methoden möglich.

Definition: trait ExampleTrait {

  function doIt(){}

} Benutzung:

class Example {
   use ExampleTrait;
}

Konfliktauflösung und Methoden-Umbenennung:

trait A {
    public function smallTalk() { echo 'a'; }
    public function bigTalk() {  echo 'A'; }
}
trait B {
    public function smallTalk() { echo 'b'; }
    public function bigTalk() { echo 'B'; }
}
class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
        B::bigTalk as talk;
    }
}

Generatoren

Wie in Python: Einfache Umsetzung von iterierbaren Objekten.

function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        yield $i;
    }
}

Metaprogrammierung

  • string gettype($mixed), is_integer(), is_object(), is_bool(), is_array() isset()

Wichtige Funktionen

  • $mixed print_r($var, $doReturnString = false) gibt menschenlesbare Form der Variablen aus oder liefert diese als String