PHP

Creating default object from empty value bei der Verwendung von chained Properties

4. Dezember 2017 · Programmierung · andreas · Kein Kommentar

Erstellt man in PHP eine neue Instanz der vordefinierten Klasse StdClass, so können dieser anschließend beliebige Eigenschaften zugewiesen werden:

$test = new StdClass();
$test->property = 1;

Versucht man allerdings mehrere Eigenschaften ohne vorherige (Teil-)Initialisierung zu verketten, wird dies von PHP mit einer entsprechenden Warnung kommentiert:

$test->anotherproperty->propertytoo = 7;

Warning: Creating default object from empty value in ... on line ..

Um diese Warnung zu vermeiden (und richtig zu initialisieren), kann eine kleine Erweiterung der Klasse StdClass vorgenommen werden, welche beim Zugriff auf jede Eigenschaft prüft, ob diese bereits existiert und ggf. das Anlegen der Instanz nachholt:

class myData extends StdClass {

	public function __get($name) {
		if (!isset($this->{$name})) {
			$this->{$name} = new myData();
		}
		return $this->{$name};
	}
}

Anschließend können in Instanzen dieser Klasse beliebige verkettete Eigenschaften definiert werden, ohne daß PHP eine Warnung ausspuckt:

$test = new myData();
$test->property = 5;
$test->anotherproperty->property = 7;

Die neue Klasse hat keine Nachteile bzg. der Verwendung gegenüber der unmodifizierten Klasse “StdClass”, auch Funktionen wie z.B. “json_encode()” funktionieren weiter problemlos.


Methods with the same name as their class will not be constructors in a future version of PHP

27. April 2017 · Programmierung · andreas · Kein Kommentar

Mit PHP 4 wurden Konstruktoren eingeführt, welche den gleichen Namen haben wie die Klasse, in der sie definiert wurden:

class tolleKlasse {

    function tolleKlasse() {
    
        // ...
    }
}

In PHP 5 wurden diese Konstruktoren beibehalten, gleichzeitig aber mit der Methode

__construct()

eine neue Art der Konstruktor-Definition eingeführt. Seit PHP 7 wird bei der Verwendung von PHP 4 Konstruktoren nun die Warnung “Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP” ausgegeben, die darauf hinweist, daß ab PHP 8 die gleichnamigen Methoden nur noch als normale Methoden, nicht aber als Konstuktoren behandelt werden.

Um vorhandenen Code fit für die Zukunft zu machen, reicht es, den Namen der Funktion zu ersetzen:

class tolleKlasse {

    function __construct() {
    
        // ...
    }
}

Da hierdurch vorhandener Code, welcher z.B. im Rahmen einer Vererbung auf den Funktionsnamen des Konstuktors zugreift, in einen Fehler läuft, kann nach dem Konstruktor eine zweite Methode mit dem ursprünglichen Funktionsnamen angelegt werden, welche den eigentlichen Konstruktor aufruft.


backupDB

29. Mai 2013 · Downloads · andreas · Kein Kommentar

backupDB is a PHP script to dump a MySQL database and send the dump to a given e-mail for backup purposes.
It was inspired by the backup function of the WordPress plugin “wp-dbmanager”.

Weiterlesen


Pfadangaben in der php.ini, Strichpunkt und Doppelpunkt

16. Dezember 2012 · Programmierung · andreas · Kein Kommentar

Manchmal sucht man Fehler, die eigentlich gar keine sind - deshalb ist der entscheidende Hinweis aus der PHP-Dokumentation auch nochmal hier dupliziert:

Das Format ist ähnlich zur PATH-Umgebungsvariablen des jeweiligen Systems: Eine Liste von Verzeichnissen, getrennt durch einen Doppelpunkt unter Unix oder ein Semikolon unter Windows.

Nein, einfach kopieren zwischen verschiedenen Betriebssystemen geht nicht!


upload_max_filesize alleine reicht nicht

28. März 2011 · Anwendungen · andreas · Kein Kommentar

Wer ‘upload_max_filesize’ in der ‘php.ini’ ändert, sollte auch ‘post_max_size’ anpassen, denn wie das PHP Manual erklärt:

‘post_max_size’ sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than ‘upload_max_filesize.’