PHP 5.6.0beta1 released

__halt_compiler

(PHP 5 >= 5.1.0)

__halt_compiler Beendet die Kompilerausführung

Beschreibung

void __halt_compiler ( void )

Beendet die Kompilerausführung. Dies kann sinnvoll sein, wenn Daten in PHP-Skripte eingebettet sind, wie z.B. in Installationsdateien.

Die Byteposition, an der die Daten beginnen, kann über die Konstante __COMPILER_HALT_OFFSET__ ermittelt werden, die nur definiert ist, wenn die Funktion __halt_compiler() in der Datei benutzt wird.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 Ein __halt_compiler()-Beispiel

<?php

// Datei öffnen
$fp fopen(__FILE__'r');

// Auf den Anfang der Daten positionieren
fseek($fp__COMPILER_HALT_OFFSET__);

// und diese ausgeben
var_dump(stream_get_contents($fp));

// hier Kompilation beendenn
__halt_compiler(); ab hier die eigentlichen Daten (z.BtargzPHPetc.)

Anmerkungen

Hinweis:

__halt_compiler() kann nur auf der höchsten Ausführungsebene und nicht innerhalb anderer Funktionen oder Methoden benutzt werden.

add a note add a note

User Contributed Notes 5 notes

up
6
-T-
5 months ago
What zsh mentioned six years ago: "Also, it cannot be used in eval() -- it won't throw a syntax error, but it won't do anything either." is wrong. It can be used in eval() -- it will halt the eval.
up
4
ravenswd at gmail dot com
3 years ago
__halt_compiler is also useful for debugging. If you need to temporarily make a change that will introduce an error later on, use __halt_compiler to prevent syntax errors. For example:

<?php
if ( $something ):
  print
'something';
endif;  
// endif placed here for debugging purposes
__halt_compiler();
endif;  
// original location of endif -- would produce syntax error if __halt_compiler was not there
?>
up
1
zsh
6 years ago
__halt_compiler() is a language construct and therefore cannot be used as a variable function.

Also, it cannot be used in eval() -- it won't throw a syntax error, but it won't do anything either.
up
-3
Anonymous
4 months ago
This is not what people expect to see on manual pages, don't take this as example.
up
-22
Ultimater at gmail dot com
4 years ago
Another possible usage, in addition to binary data and installers,
is using it to separate model, view and controller logic from one another:

<?php
class viewhelper{function render(){
eval(
file_get_contents(__FILE__,null,null,__COMPILER_HALT_OFFSET__));
}}

//database logic goes here
$row=array(
'loggedin'=>true,
'modcp'=>true,
'admincp'=>false,
'username'=>'Ultimater',
'userid'=>1234
);
//database logic goes here

//controller logic goes here
$view=new viewhelper;
$view->title="Test -> Ultimater's MVC example";
$view->base="http://".$_SERVER['HTTP_HOST'];
$view->username=$row['username'];
$view->userid=$row['userid'];
$view->authbar->loggedin=$row['loggedin'];
$view->authbar->modcp=$row['modcp'];
$view->authbar->admincp=$row['admincp'];
$view->render();
//controller logic goes here

__halt_compiler();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=htmlentities($this->title)?></title>
<style type="text/css">
a{color:#3333ff;text-decoration:none;}
a:hover{color:#0380fc;}
</style>
</head>
<body>
<?php
if($this->authbar->loggedin){
?>
<table><tr>
<td>Hello <a href="<?=$this->base?>/showuser.php?id=<?=$this->userid?>
"><?=htmlentities($this->username)?></a></td><td>[</td>
<td><a href="<?=$this->base?>/logout.php">Log Out</a></td>
<th><a href="<?=$this->base?>/usercp.php">UserCP</a></th>
<? if($this->authbar->modcp){ ?>
<td>&middot;</td><th><a href="<?=$this->base?>/modcp.php">ModCP</a></th>
<? } ?>
<?
if($this->authbar->admincp){ ?>
<td>&middot;</td><th><a href="<?=$this->base?>/admincp.php">AdminCP</a></th>
<? } ?>
<td>]</td>
</tr></table>
<?php
}else{
?>
<table><tr><td>Hello Guest</td><td>[</td>
<td><a href="<?=$this->base?>/login.php">Log In</a></td>
<th><a href="<?=$this->base?>/register.php">Register</a></th>
<td>]</td></tr></table>
<? } ?>
</body>
</html>
To Top