Skip to content
Permalink
Browse files

Update TIL-In-PHP-Part-1 de

  • Loading branch information...
rhazdon committed Mar 19, 2019
1 parent 6146ab5 commit 07f49453a8c41f28c9b2badc38bd2f165c7a381d
Showing with 11 additions and 18 deletions.
  1. +11 −18 content/posts/php/TIL in PHP - Part 1/index.de.md
@@ -11,19 +11,18 @@ tags:

[PHP](https://php.net) ist ja eine Sprache, die viele lieben und (zumindest gefühlt) noch mehr hassen. Auch wenn gerade die zweite Gruppe das nicht gerne hört, aber PHP ist aktuell die Sprache, die am häufigsten für Backendanwendungen im Web verwendet wird.

[w3techs.com](https://w3techs.com/) veröffentlicht regelmäßig Zahlen zur Nutzung von Webtechnologien im Zusammenhang mit der Häufigkeit. So ermittelt w3techs.com, dass [derzeit 78,9% aller Websiten serverseitig auf PHP basieren](https://w3techs.com/technologies/details/pl-php/all/all). Eine andere Statistik ermittelt [SimilarTech](https://www.similartech.com/), die die absoluten Einsätze von PHP zählt und auf eine Zahl von [7.394.225 Websiten](https://www.similartech.com/technologies/php) kommen. Im [Vergleich dazu Python mit 123.879](https://www.similartech.com/compare/php-vs-python).
[w3techs.com](https://w3techs.com/) veröffentlicht regelmäßig Zahlen zur Nutzung von Webtechnologien im Zusammenhang mit der Häufigkeit. So ermittelt w3techs.com, dass [derzeit 78,9% aller Webseiten serverseitig auf PHP basieren](https://w3techs.com/technologies/details/pl-php/all/all). Eine andere Statistik ermittelt [SimilarTech](https://www.similartech.com/), die die absoluten Einsätze von PHP zählt und auf eine Zahl von [7.394.225 Webseiten](https://www.similartech.com/technologies/php) kommen. Im [Vergleich dazu Python mit 123.879](https://www.similartech.com/compare/php-vs-python).

Fakt ist also, dass PHP noch da ist. Deswegen, aus Interesse an der Sprache und auch aus anderen sehr guten (beruflichen) Gründen befasse ich mich nun wieder verstärkt damit. Meine letzte Reise mit PHP schon eine ganze Weile her.


## PHP 7 entwickelt sich. Und irgendwie auch nicht.
## PHP 7 entwickelt sich

PHP hatte schon immer alte Zöpfe; das wissen wir alle. Mit der Version 7 konnten die Entwicklern der Sprache diese auf jeden Fall deutlich aufwerten und verbessern. [Golem](https://www.golem.de/news/programmiersprache-im-detail-mit-php-7-wird-das-internet-schneller-1512-116750-2.html) hat dazu einen schönen Artikel darüber rausgebracht, welche Features die Sprache ihr eigen nennen darf. Die offizielle Doku dazu findet sich auf der [Homepage von PHP](http://php.net/manual/de/migration70.new-features.php).
PHP hatte schon immer alte Zöpfe; das wissen wir alle. Mit der Version 7 konnten die Entwicklern der Sprache diese auf jeden Fall deutlich aufwerten und verbessern. [Golem](https://www.golem.de/news/programmiersprache-im-detail-mit-php-7-wird-das-internet-schneller-1512-116750-2.html) hat dazu einen schönen Artikel darüber herausgebracht, welche Features die Sprache ihr eigen nennen darf. Die offizielle Doku dazu findet sich auf der [Homepage von PHP](http://php.net/manual/de/migration70.new-features.php).

Die alte Seele hat die Sprache aber immer noch ...
Ein paar komsiche Dinge gibt es da aber doch noch ...


## Scoping (oder auch nicht)
## (Kein) Scoping

Ein Freund von mir schickte mir folgenden Code und fragte mich, welche Ausgabe ich bei den `echo` erwarte:

@@ -46,7 +45,7 @@ Nach einigem Überlegen kam ich auf folgendes Ergebnis:
// [ 1, 2, 3 ]
```

Aber, wen wundert es: Es ist nicht richtig.
Aber, wen wundert es, es ist natürlich nicht richtig.

`foreach` wird in PHP nicht gescoped. Das bedeutet, dass die Deklaration von `$val` in der ersten der beiden `foreach` Schleifen die Variable global anlegt.

@@ -58,23 +57,20 @@ In der zweiten `foreach` Schleife passiert nun folgendes:

1. Iteration: `$val` wird der Inhalt von `$arr[0]` zugewiesen. Da `$val` eine Referenz auf `$arr[2]` ist, ändert sich nicht der Wert von `$val`, sondern von `$arr[2]`. Somit sieht `$arr` nach der ersten Iteration so aus: `[ 1, 2, 1]`.
2. Iteration: Jetzt wird `$val` der Wert von `$arr[1]` zugewiesen, also `2`. Da sich an den Referenzen nichts verändert hat, sieht `$arr` nun wie folgt aus: `[ 1, 2, 2 ]`.
3. Iteration: Das gleiche Spiel. `$val` wird nun der Wert von `$arr[2]` zugewiesen. Endergbenis: `[ 1, 2, 2 ]`.
3. Iteration: Das gleiche Spiel. `$val` wird nun der Wert von `$arr[2]` zugewiesen. Endergebnis: `[ 1, 2, 2 ]`.

Generell ist die Funktionsweise von Referenzen jetzt kein Hexenwerk. Allerdings würde man das Verhalten hier so gar nicht erwarten, da man auf jeden Fall davon ausgehen würde, dass `$val` gescoped ist. Schließlich wurde es in einem `foreach` Kontext deklariert.

Um das Problem übrigens professionell zu lösen, empfiehlt sichh nach jeder `foreach` Schleife die explizite Dereferenzierung.
Um das Problem übrigens professionell zu lösen, empfiehlt sich nach jeder `foreach` Schleife die explizite Dereferenzierung.

```php
foreach ($arr as $val) {}
unset($val);
```

Irgendwie schade, dass man das nicht verbessert hat. Stattdessen gibt es jetzt einen


## Spaceship Operator

[Der Spaceship Operater](http://php.net/manual/de/migration70.new-features.php) ist ein Operator, welcher zwei Werte vergleicht. Im Grunde verhält sich der Operator wie eine Waage. Ist der linke Wert größer, ist das Ergebnis `1`. Sind beide Werte gleich, so ist das Ergebnis der Operation `0`. Ist der rechte Wert größer, `-1`.
[Der Spaceship Operator](http://php.net/manual/de/migration70.new-features.php) ist ein Operator, welcher zwei Werte vergleicht. Im Grunde verhält sich der Operator wie eine Waage. Ist der linke Wert größer, ist das Ergebnis `1`. Sind beide Werte gleich, so ist das Ergebnis der Operation `0`. Ist der rechte Wert größer, lautet das Ergebnis `-1`.

```php
// Integers
@@ -93,7 +89,7 @@ echo "a" <=> "b" // -1
echo "b" <=> "a" // 1
```

Praktisch? Useless? Ich bin mir selbst noch nicht so schlüssig. Auf jeden Fall ist auch diese Funktion mit Vorsicht zu genießen, vor allem beim vergleichen zweier Character, da hier lediglich der ASCII Tabellen Wert überprüft wird. Das heißt:
Ich bin bisher noch nicht in einen Fall geraten, in dem das nützlich ist. Wie sinnvoll und nutzbringend das also ist, ist mir noch nicht ganz klar. Auf jeden Fall ist auch diese Funktion mit Vorsicht zu genießen, vor allem beim vergleichen zweier Character, da hier lediglich der ASCII-Tabellen-Wert überprüft wird. Das heißt:

```php
echo chr(42) <=> chr(43); // -1
@@ -109,7 +105,4 @@ Auch wenn es logisch ist, dass `"a"` (ASCII Wert 97) größer ist, als `"A"` (AS

## Gespannt bleiben

Die Sprache hat noch einiges zu bieten. Da PHP mit die älteste Sprache im Webbereich ist, hat diese entsprechend auch die meisten Fehler und Probleme (gehabt). Es ist wirklich lehrreich zu erforschen, was genau moderne Sprachen wie besser machen. Und wie sich PHP selbst auch entwickelt und verbessert.


Ich denke, dass da wohl noch einige interessante learnings folgen werden ...
Die Sprache hat noch einiges zu bieten. Da PHP mit die älteste Sprache im Webbereich ist, hat diese entsprechend auch die meisten Fehler und Probleme (gehabt) und mit auch eine starke Evolution durchgemacht. Es ist wirklich lehrreich zu erforschen, was genau moderne Sprachen wie besser machen. Und wie sich PHP selbst entwickelt und verbessert.

0 comments on commit 07f4945

Please sign in to comment.
You can’t perform that action at this time.