2012-03-30 13 views
0

私はCakePHP 2.1.1でPHP 5.3.8を使用しています。"global"はCakePHP 2.1.1で動作しません。

これは私のビュー(レイアウトが空で、実際にそれが唯一のビュー自体を出力)

<?php 
// $present is not a view variable 
$present = 'Hello World!'; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     global $present; 
     exit(var_dump($present)); 
    } 
} 


$pdf = new ApplicationsPDF(); 
$pdf->CreateApplicationTable(); 
?> 

出力の代わりにnullでの「Hello World!」です。

このコードをコピーして(ブラウザから直接実行する)単一のファイルに貼り付けると、完全に機能します。

したがって、CakePHPバグでなければなりません。誰もそれを知っていますか?

+0

この重要な問題は以前は検出されていませんが、5.3.9以降の変更履歴には何もありません。私はそれがあなたの地域の環境について何かを想像しなければなりません。 auto_prepend_fileを使って何かを書き留めていますか? –

+0

上記のコードはありませんが、CakePHP 2.1.1から実行されます。私はコードが完璧にスタンドアロンで実行されていることを理解しました。私は質問を編集します。 (私はStackoverflowがバグトラッカーではないことを知っていますが、私はこの質問を削除したくありませんでした) – ComFreek

+0

私はそれがポイントではないことを知っていますが、なぜグローバル変数を使用する必要があると思いますか? '$ present'をコンストラクタに渡してクラス変数を設定してみませんか? –

答えて

0

それは、PHPやCakePHPのバグではありません!

CakePHPはそのビュークラスにビューを含むため、宣言された変数は実際にグローバルスコープにはなく、globalは効果がありません。 ADmadから

source):

ご自身でご代入する$ testVarをファイルを実行すると= '!こんにちは 世界グローバルな文脈の中にあるので、物事はあなたが期待したように動作します。 。しかし、それがビューファイルとして使用されるとき、そのファイルは Viewクラスの関数に含まれているため、グローバルコンテキストではなくなり、$ testVar はもはやグローバル変数ではなくなり、あなたの期待は正しくありません。とにかくOOPフレームワークでグローバル変数 を使うのは悪い考えです。

0

クラス定義の前にglobalキーワードを宣言してください:

global $present; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     exit(var_dump($present)); 
    } 
} 
+0

これは動作せず、 'CreateApplicationTable()'に '未定義の変数'エラーを与えます。 – ComFreek

+0

あなたは '$ present'変数宣言部を削除しませんでしたか? –

+0

私はしませんでしたが、 '$ present'は決して定義されません(これはビュー変数ではありません)。 – ComFreek

関連する問題