Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent Clase Runkit Anti-Sandbox

Descripción

Runkit_Sandbox_Parent::__construct ( void ) : void

Instanciar la clase Runkit_Sandbox_Parent desde dentro de un entorno de aislamiento de procesos creado desde la clase Runkit_Sandbox proporciona algunos medios (controlados) para que un aislamiento de procesos hijo acceda a su padre.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Para que cualquier característica de Runkit_Sandbox_Parent funcione, el soporte debe estar habilitado sobre una base del aislamiento de procesos habilitando la bandera parent_access desde el contexto padre.

Ejemplo #1 Trabajar con variables en un aislamiento de procesos (sandbox)

<?php
$sandbox 
= new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>

Acceder a las Variables del Padre

Al igual que con el acceso a variables en un aislamiento de procesos, las variables del padre de un aislamiento de procesos se puede leer y escribir como propiedades de la clase Runkit_Sandbox_Parent. El acceso a la lectura de variables padre puede estar habilitado con el ajuste parent_read (además del ajuste base parent_access). El acceso a escritura, a su vez, se habilita a través del ajuste parent_write.

A diferencia del acceso a variables de un hijo del aislamiento de procesos, el ámbito de la variable no está limitado sólo a globales. Estableciendo el ajuste parent_scope a un valor entero apropiado se pueden examinar otros ámbitos en la pila de llamadas activas. Un valor de 0 (Predeterminado) dirigirá el acceso a variables al ámbito global. 1 apuntará al acceso a varables en cualquier ámbito de variables que estuviera activo en el momento en el que el bloque del código del aislamiento de proceosos actual estuviera ejecutándose. Valores mayores recorren hacia atrás las funciones que llamaron a las funciones que llevaron al código de ejecución del aislamiento de procesos que intentó acceder a sus propias variables padre.

Ejemplo #2 Acceder a las varibales padre

<?php
$php 
= new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;

$prueba "Global";

$php->eval('$PARENT = new Runkit_Sandbox_Parent;');

$php['parent_scope'] = 0;
uno();

$php['parent_scope'] = 1;
uno();

$php['parent_scope'] = 2;
uno();

$php['parent_scope'] = 3;
uno();

$php['parent_scope'] = 4;
uno();

$php['parent_scope'] = 5;
uno();

function 
uno() {
    
$prueba "uno()";
    
dos();
}

function 
dos() {
    
$prueba "dos()";
    
tres();
}

function 
tres() {
    
$prueba "tres()";
    
$GLOBALS['php']->eval('var_dump($PARENT->prueba);');
}
?>

El resultado del ejemplo sería:

string(6) "Global"
string(7) "tres()"
string(5) "dos()"
string(5) "uno()"
string(6) "Global"
string(6) "Global"

Llamar a las Funciones Padre

Igual que con el acceso del aislamiento de procesos, un aislamiento de procesos puede acceder a sus funciones padre siempre que haya sido habilitada la configuración apropiada. Habilitar parent_call permitirá al aislamiento de procesos llamar a todas las funciones disponibles en el ámbito padre. Los constructores del lenguaje están controlados cada uno por sus propias configuraciones: print y echo son habilitadas con parent_echo. die() y exit() son habilitadas con parent_die. eval() es habilitada con parent_eval mientras que include, include_once, require, y require_once son habilitadas a través de parent_include.