Zend Framework Elemente mit und ohne Config

Das Zend_Form Modul verfügt über verschiedene Elemente (Zend_Form_Element), die entweder als Objekte instanziiert werden können oder über eine Konfigurationsdatei. Den Unterschied möchte ich anhand zwei kleiner Quelltexte am Beispiel von Zend_Form_Element_Captcha veranschaulichen:

Als Objekt:

1
2
3
4
5
6
7
8
9
10
11
12
$captcha = new Zend_Form_Element_Captcha
('captain_captcha', array
	(
		'label' => "Bitte bestätige das folgende Captcha:",
		'captcha' => 'Figlet',
		'captchaOptions' => array
		(
			'captcha' => 'Figlet',
			'timeout' => 300
		),
	)
);

Als Konfiguration:

1
2
3
4
formular.name.elements.captain_captcha.type		= "captcha"
formular.name.elements.captain_captcha.options.label	= "Bitte bestätige das folgende Captcha:"
formular.name.elements.captain_captcha.options.captcha	= "Figlet"
formular.name.elements.captain_captcha.options.timeout	= 300

Cannot modify header information – headers already sent by

Mit der Funktion header kann man in PHP den HTTP-Header eines Dokuments ändern. Das ist besonders sinnvoll, wenn man dem Browser Bilder ausliefern möchte und daher vermeiden will, dass der Browser das Bild als HTML-Seite interpretiert.

Beim Umgang mit header muss man darauf achten, dass vor dem Einsatz dieser Funktion keine HTML-Tags oder andere formatierte Ausgaben stattfinden. Außerdem dürfen sich vor (und nach!) der PHP-Einbindung keine Leerzeichen befinden.

Ein einfaches header-Beispiel ist:

<?php header("Content-type: image/jpeg") ?>

Selbst bei diesem Einzeiler kann es aber vorkommen, dass eine Warnung mit dem Text „Cannot modify header information – headers already sent by“ ausgegeben wird. In diesem Fall ist die PHP-Datei in UTF-8-Codierung abgepeichert und enthält ein „Byte Order Mark“ (kurz: BOM). Das BOM-Steuerzeichen wird von PHP falsch erkannt, weshalb man für diese Datei „UTF-8 ohne BOM“ als Kodierung wählen muss.

Wie das geht, zeigt dieser Screenshot von Notepad++:

Statische Methoden in PHP

In PHP können nicht-statische Methoden einer Klasse auf statische Variablen zugreifen.

Beweis:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
class StaticTester 
{ 
	// Statische Variable
	private static $_id=72; 
 
	// Default-Konstruktor
	function __construct() 
	{
		self::$_id++;
	}
 
	// Statische Methode
	public static function staticMethod() 
	{ 
		echo ('call of static method: ' . self::$_id);
	} 
 
	// Nicht-statische Methode
	public function nonStaticMethod() 
	{
		echo ('call of non-static method: ' . self::$_id);
	} 
}
 
	StaticTester::staticMethod();
	echo "<br/>";
	StaticTester::nonStaticMethod();
 
?>

Das ist ein Unterschied zum Standard in Java.

Seiten-URL mit PHP auslesen

Dieser PHP-Code zeigt die URL der aktuellen Seite an:

function curPageURL() {
 $pageURL = ‚http‘;
 if ($_SERVER[„HTTPS“] == „on“) {$pageURL .= „s“;}
 $pageURL .= „://“;
 if ($_SERVER[„SERVER_PORT“] != „80“) {
  $pageURL .= $_SERVER[„SERVER_NAME“].“:“.$_SERVER[„SERVER_PORT“].$_SERVER[„REQUEST_URI“];
 } else {
  $pageURL .= $_SERVER[„SERVER_NAME“].$_SERVER[„REQUEST_URI“];
 }
 return $pageURL;
}

echo „Homepage-Link: „.curPageURL();
?>

Möchte man eine Variable aus einer URL auslesen, geht das wie folgt:

Beispiel: https://www.bennyn.de/?variablenname=72
PHP-Code: <?php $variable= $_GET[‚variablenname‘]; echo $variable; ?>

PHP Fehlermeldungen unterdrücken

Mit dem @-Zeichen vor einem Befehl kann man in PHP einzelne Fehlermeldungen unterdrücken.

Doch es geht auch noch flächendeckender:

<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR E_WARNING E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL E_NOTICE);

// Report all PHP errors
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);
ini_set('error_reporting'E_ALL);

?>