2011-06-01 127 views
0

比如我有3個文件:PHP的問題與變量

首先index.php與下面的代碼:

<?php 
    include("includes/vars.php"); 
    include("includes/test.class.php"); 

    $test = new test(); 
?> 

然後vars.php與下面的代碼:

<?php 
    $data = "Some Data"; 
?> 

和最後test.class.php

<?php 
class test 
{ 
    function __construct() 
    { 
    echo $data; 
    } 
} 
?> 

當我運行index.php時,Some Data的值從$data變量不顯示,如何讓它工作?

回答

1

Reading material.

由於範圍。數據在全局範圍內,類中唯一可用的是類範圍內的變量和方法。

你可以做

class test 
{ 
    function __construct() 
    { 
    global $data; 
    echo $data; 
    } 
} 

但它一個類中使用全局變量很好的做法。

您可以通過構造函數將該變量傳遞給類。

class test 
{ 
    function __construct($data) 
    { 
    echo $data; 
    } 
} 

$test = new test("test"); 
+2

在這種情況下使用全局變量被認爲是不好的做法。 – 2011-06-01 09:19:18

+0

是的。這正是我所說的。 「但是,在班級中使用全局變量是不行的。」 – 2011-06-01 09:20:21

+0

但如果要使用$ GLOBALS [data]?這是好事還是會導致以後出現問題? – John 2011-06-01 09:25:42

1

echo $data;試圖從本地變量中回顯數據,這顯然沒有設置。 你應該在$數據傳遞到你的構造:

<?php 
class test 
{ 
    function __construct($data) 
    { 
    echo $data; 
    } 
} 
?> 

它會像這樣:

$test = new test($data); 

您將有實例測試對象之前初始化的全局變量$的數據。

+0

謝謝,但這不會解決我的問題 – John 2011-06-01 09:24:37

+0

它應該解決你的問題......或者你的問題是什麼呢? – 2011-06-01 10:31:51

+0

我將在vars.php中有很多變量,並將它們全部添加使用:new test(var1,var2 ...)不是一個好的選項 – John 2011-06-01 10:59:18

0

我可以建議你使用全局變量,但那很醜陋。我建議你使用常量來代替,因爲這種感覺足以

define('DATA', "Some Data"); 

另一種解決方案是將值注入到對象

class test { 
    public function __construct ($data) { 
    echo $data; 
    } 
} 
$test = new test($data); 
1

$data不在同一範圍內,這就是爲什麼它的無法使用。 如果您想要在班級中未定義的數據可用,您可以一起傳遞數據。

class Test 
{ 
    function __construct($data) 
    { 
     echo $data; 
    } 
} 
$oTest = new Test('data'); 
+0

謝謝,但這不是我的情況的解決方案 – John 2011-06-01 09:22:45