Gültige und ungültige Variablennamen (Thema: PHP Beispiele)

Welche Zeichen in PHP für Variablennamen verwendet werden dürfen und welche nicht

1. Allgemeines

Die Faustregel ist, dass gültige Variablennamen in PHP mit einem Buchstaben von a bis z oder einem Unterstrich (_) beginnen und danach (zweite Stelle und folgende) aus beliebig vielen Buchstaben (a bis z), Zahlen (0 bis 9) oder Unterstrichen bestehen. Der genaue reguläre Ausdruck lautet:

^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$

Beispiel:

PHP-Code
<?php
	$example  = 'bla';
	$_temp    = 'something';
	$______   = 'gueltig';
	$year2000 = 2000;
?>

Die Beschränkung auf bestimmte Zeichen kann umgangen werden indem man auf geschweifte Klammern zurückgreift:

PHP-Code
<?php
	error_reporting(E_ALL);
	${'$#?!'} = 'example';
	var_dump(${'$#?!'});
?>

HTML-Code: Ausgabe
string(7) "example"


2. Gültige erste und zweite Buchstaben

Bei „normaler” Definition der Variablen — also ohne geschweifte Klammern — sind die gültigen Buchstaben an erster und zweiter Stelle des Variablennamens in der nachfolgenden Tabelle dargestellt. Getestet wurden die ASCII-Zeichen 1 bis 255. Gültige Zeichen sind mit „OK” markiert, ungültige mit einem Minus („-”).

Nummer Zeichen Als erster
Buchstabe
Als zweiter
Buchstabe
1--
2--
3--
4--
5--
6--
7--
8--
9 -OK
10 -OK
11 --
12 --
13 -OK
14--
15--
16--
17--
18--
19--
20--
21--
22--
23--
24--
25--
26--
27--
28--
29--
30--
31--
32 -OK
33!--
34"--
35#--
36$--
37%--
38&--
39'--
40(--
41)--
42*--
43+--
44,--
45---
46.--
47/--
480-OK
491-OK
502-OK
513-OK
524-OK
535-OK
546-OK
557-OK
568-OK
579-OK
58:--
59;--
60<--
61=--
62>--
63?--
64@--
65AOKOK
66BOKOK
67COKOK
68DOKOK
69EOKOK
70FOKOK
71GOKOK
72HOKOK
73IOKOK
74JOKOK
75KOKOK
76LOKOK
77MOKOK
78NOKOK
79OOKOK
80POKOK
81QOKOK
82ROKOK
83SOKOK
84TOKOK
85UOKOK
86VOKOK
87WOKOK
88XOKOK
89YOKOK
90ZOKOK
91[--
92\--
93]--
94^--
95_OKOK
96`--
97aOKOK
98bOKOK
99cOKOK
100dOKOK
101eOKOK
102fOKOK
103gOKOK
104hOKOK
105iOKOK
106jOKOK
107kOKOK
108lOKOK
109mOKOK
110nOKOK
111oOKOK
112pOKOK
113qOKOK
114rOKOK
115sOKOK
116tOKOK
117uOKOK
118vOKOK
119wOKOK
120xOKOK
121yOKOK
122zOKOK
123{--
124|--
125}--
126~--
127OKOK
128OKOK
129OKOK
130OKOK
131ƒOKOK
132OKOK
133OKOK
134OKOK
135OKOK
136ˆOKOK
137OKOK
138ŠOKOK
139OKOK
140ŒOKOK
141OKOK
142ŽOKOK
143OKOK
144OKOK
145OKOK
146OKOK
147OKOK
148OKOK
149OKOK
150OKOK
151OKOK
152˜OKOK
153OKOK
154šOKOK
155OKOK
156œOKOK
157OKOK
158žOKOK
159ŸOKOK
160 OKOK
161¡OKOK
162¢OKOK
163£OKOK
164¤OKOK
165¥OKOK
166¦OKOK
167§OKOK
168¨OKOK
169©OKOK
170ªOKOK
171«OKOK
172¬OKOK
173­OKOK
174®OKOK
175¯OKOK
176°OKOK
177±OKOK
178²OKOK
179³OKOK
180´OKOK
181µOKOK
182OKOK
183·OKOK
184¸OKOK
185¹OKOK
186ºOKOK
187»OKOK
188¼OKOK
189½OKOK
190¾OKOK
191¿OKOK
192ÀOKOK
193ÁOKOK
194ÂOKOK
195ÃOKOK
196ÄOKOK
197ÅOKOK
198ÆOKOK
199ÇOKOK
200ÈOKOK
201ÉOKOK
202ÊOKOK
203ËOKOK
204ÌOKOK
205ÍOKOK
206ÎOKOK
207ÏOKOK
208ÐOKOK
209ÑOKOK
210ÒOKOK
211ÓOKOK
212ÔOKOK
213ÕOKOK
214ÖOKOK
215×OKOK
216ØOKOK
217ÙOKOK
218ÚOKOK
219ÛOKOK
220ÜOKOK
221ÝOKOK
222ÞOKOK
223ßOKOK
224àOKOK
225áOKOK
226âOKOK
227ãOKOK
228äOKOK
229åOKOK
230æOKOK
231çOKOK
232èOKOK
233éOKOK
234êOKOK
235ëOKOK
236ìOKOK
237íOKOK
238îOKOK
239ïOKOK
240ðOKOK
241ñOKOK
242òOKOK
243óOKOK
244ôOKOK
245õOKOK
246öOKOK
247÷OKOK
248øOKOK
249ùOKOK
250úOKOK
251ûOKOK
252üOKOK
253ýOKOK
254þOKOK
255ÿOKOK

Die Tabelle wird mit dem nachfolgenden Skript generiert. Voraussetzung ist, dass es im Verzeichnis in dem es liegt, in die Dateien „nametest1.php” und „nametest2.php” schreiben und diese über die URLs „http://www.phptest.local/nametest1.php” und „http://www.phptest.local/nametest2.php” aufrufen kann (hosts-Datei sollte entsprechend abgeändert werden). Zur Funktionsweise: Das Skript generiert für jeden der ASCII-Buchstaben zwischen 1 und 255 je eine Datei in der der Buchstabe an erster Stelle einer Variable steht und eine in der er an zweiter Stelle steht. Beide Dateien werden per URL aufgerufen, sodass Fehler beim Aufruf der Dateien nicht das „Hauptskript” beeinträchtigen. Sollte das ASCII-Zeichen an erster und/oder zweiter Stelle ungültig sein, wird eine Fehlermeldung (Notice, Warning oder Error) bei Aufruf der jeweiligen Datei erzeugt. Es wird auf eine solche Fehlermeldung geprüft und das Zeichen gegebenenfalls als ungültig markiert. (Bereits eine Notice bei Verwendung des Zeichens an erster oder zweiter Stelle sorgt daher dafür, dass das Zeichen hier als ungültig gilt.)

PHP-Code
<?php
	error_reporting(E_ALL);
	mb_internal_encoding('UTF-8');
	define('BASE_URL', 'http://www.phptest.local/');
	
	function isContainingError($str) {
		return preg_match('/(error|warning|notice)/', strtolower($str));
	}
	
	$filecontents = '<?php
		error_reporting(E_ALL);
		$%name = \'example\';
		echo $%name;
?>';
	
	$results = array();
	
	for ($x=1; $x<=255; $x++) {
		$char = chr($x);
		$name1 = $char.'a';
		$name2 = 'a'.$char;
		
		$content1 = str_replace('%name', $name1, $filecontents);
		$content2 = str_replace('%name', $name2, $filecontents);
		
		file_put_contents('nametest1.php', $content1);
		file_put_contents('nametest2.php', $content2);
		
		$result1 = file_get_contents(BASE_URL . 'nametest1.php');
		$result2 = file_get_contents(BASE_URL . 'nametest2.php');
		
		$results[$x] = array(!isContainingError($result1), !isContainingError($result2));
	}
	
?>

<table id="php-nametest">
	<thead>
		<tr>
			<th>Nummer</th>
			<th>Zeichen</th>
			<th>Als erster<br />Buchstabe</th>
			<th>Als zweiter<br />Buchstabe</th>
		</tr>
	</thead>
	<tbody>
		<?php
			foreach ($results as $chrNumber=>$boolArr) {
				$chr = chr($chrNumber);
				$isValidAsFirstChar = $boolArr[0];
				$isValidAsSecondChar = $boolArr[1];
				echo('<tr>'
						.'<td>' . $chrNumber .'</td>'
						.'<td>&#' . $chrNumber .';</td>'
						.'<td>' . ($isValidAsFirstChar ? 'OK' : '-') . '</td>'
						.'<td>' . ($isValidAsSecondChar ? 'OK' : '-') . '</td>'
					.'</tr>'."\n");
			}
		?>
	</tbody>
</table>

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK