__halt_compiler

(PHP 5 >= 5.1.0)

__halt_compiler Detiene la ejecución del compilador

Descripción

void __halt_compiler ( void )

Detiene la ejecución del compilador. Esto puede ser útil para embeber información en scripts de PHP, como en archivos de instalación.

La posición de byte del inicio de la información se puede determinar por la constante __COMPILER_HALT_OFFSET__, la cuál está definida sólo si hay un __halt_compiler() presente en el archivo.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un Ejemplo de __halt_compiler()

<?php

// abrir este archivo
$fp fopen(__FILE__'r');

// buscar el puntero de archivo a la información
fseek($fp__COMPILER_HALT_OFFSET__);

// e imprimirlo
var_dump(stream_get_contents($fp));

// el final de la ejecución del script
__halt_compiler(); la información de instalación (p.ejtargzPHPetc.)

Notas

Nota:

__halt_compiler() sólo se puede usar desde el ámbito más externo.

add a note add a note

User Contributed Notes 5 notes

up
6
-T-
6 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