PHP マニュアル
前のページ |  | 次のページ

# Runkit_Sandbox_Parent

(no version information, might be only in CVS)

Runkit_Sandbox_Parent -- Runkit 反サンドボックス（Anti-Sandbox）クラス

## 説明

void Runkit_Sandbox_Parent::__construct ( void )

Runkit_Sandbox クラスが作成した サンドボックス環境から Runkit_Sandbox_Parent クラスのインスタンスを作成し、サンドボックスからその親インスタンスに アクセスするための（管理された）手段を提供します。

> 注意: サンドボックスのサポート (runkit_lint(), runkit_lint_file(), および Runkit_Sandbox クラスで使用)は、PHP 5.1 以降または特別なパッチを適用した PHP 5.0 でのみ利用可能であり、スレッドセーフを有効にしておく必要があります。 詳細については、runkit パッケージに含まれる README ファイルを参照してください。

Runkit_Sandbox_Parent の機能を有効にするには、 親のコンテキストから各サンドボックス単位で `parent_access` フラグを有効にする必要があります。

例 1. サンドボックスから変数を使用する

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

## 親の変数にアクセスする

サンドボックス内の変数へのアクセスと同様、親の変数の読み込みや 親の変数への書き込みが可能です。これは Runkit_Sandbox_Parent クラスのプロパティとして 扱われます。親の変数の読み込みは、`parent_read` 設定を有効にすることで可能となります（それに加えて、基本となる `parent_access` の設定も必要です）。 一方、書き込みについては `parent_write` の設定により 可能となります。

サンドボックス内の変数へのアクセスとは異なり、変数のスコープが グローバルに限定されることはありません。`parent_scope` を適切な整数値に設定することで、アクティブなコールスタック内で 他のスコープが使用可能です。0（デフォルト）は、グローバルスコープで 変数に直接アクセスします。1 は、サンドボックスのコードが実行された ブロック内のスコープを設定します。それより大きい値を指定した場合、 サンドボックスのコードを実行した関数の呼び出し元を順にたどり、 そのスコープの変数にアクセスしようと試みます。

例 2. 親の変数にアクセスする

`<?php
$php = new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;
$test = "Global";
$php->eval('$PARENT = new Runkit_Sandbox_Parent;');
$php['parent_scope'] = 0;
one();
$php['parent_scope'] = 1;
one();
$php['parent_scope'] = 2;
one();
$php['parent_scope'] = 3;
one();
$php['parent_scope'] = 4;
one();
$php['parent_scope'] = 5;
one();
function one() {
$test = "one()";
two();
}
function two() {
$test = "two()";
three();
}
function three() {
$test = "three()";
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>`

上の例の出力は以下となります。

    string(6) "Global"
    string(7) "three()"
    string(5) "two()"
    string(5) "one()"
    string(6) "Global"
    string(6) "Global"

## 親の関数をコールする

適切な設定を有効にすることで、サンドボックスはその親の関数に アクセスすることが可能となります。 `parent_call` を有効にすると、サンドボックスから 親スコープの全ての関数をコールすることが可能となります。 言語構造については、以下のように個々の設定項目で管理されます。 print() および echo() は `parent_echo` を有効にすると使用可能です。 die() および exit() は `parent_die` を有効にすると使用可能です。 eval() は `parent_eval` を 有効にすると使用可能です。また include()、 include_once()、require() および require_once() は `parent_include` を有効にすると使用可能です。

前のページ | ホーム | 次のページ
Runkit_Sandbox | 上に戻る | runkit_class_adopt