2009-09-23 63 views
-1

有沒有辦法在類中設置某些東西爲全局,並讓該類的所有方法都可以訪問它?目前如果我使用全球$ session;即使所有方法都在同一個類中,我也必須將其添加到使用它的每個方法中。我可以在PHP的類級聲明全局的東西嗎?

如果我嘗試直接將它添加到類,然後我得到一個PHP錯誤說是期待一個函數

global $session; 

這裏是一個更好的例子...

class test{ 
    function test1(){ 
     $self->test2($var); 
    } 

    function test2($var){ 
     return $var 
    } 
} 
在此

案例我在下面得到這個錯誤,我需要使用全球或什麼? 致命錯誤:調用一個成員函數測試2()非對象

回答

2

你得到一個錯誤:

$newFoo = new Foo(); 
$newFoo->output(); 
$newFoo->a(); 
$newFoo->output(); 
$newFoo->b(); 
$newFoo->output(); 

會產生以下輸出。

$this->test2($var); 
+0

謝謝,爲我節省了很多時間 – JasonDavis 2009-09-23 03:22:08

3

我可能誤解的問題,但我想你想要的是一個實例變量:

<?php 
    class Foo { 
     var $bar = "blue" 

     function output() { 
      echo $this->bar . "\n"; 
     } 

     function a() { 
      $this->bar = "green"; 
     } 
     function b() { 
      $this->bar = "red"; 
     } 
    } 
?> 

在這情況下,$bar是實例變量,可從每個方法訪問。下面的代碼,使用Foo類:因爲您使用self代替this

+0

對不起我有兩個問題混在一起在這裏,我的意思是讓我說我​​有2個方法在1類,我需要在方法a中調用方法b但是當我發生致命錯誤時出現此錯誤:調用非對象的成員函數test2() – JasonDavis 2009-09-23 03:15:48

+0

您是否調用$ this-> test2(); ? – 2009-09-23 04:05:32

3

有不同的方式來做到這一點,

<?php 
class test{ 
    private $p_var; 
    public static $s_var; 

    function test(){ 
     $this->p_var="RED"; 
     self::$s_var="S_RED"; 
    } 

    function test1(){ 
     return $this->test2($this->p_var); 
    } 
    function test2($var){ 
     return $var; 
    } 
    function test3($var){ 
     $this->p_var=$var; 
    } 

    function stest1(){ 
     return $this->test2(self::$s_var); 
    } 
    function stest2($var){ 
     return $var; 
    } 
    function stest3($var){ 
     self::$s_var=$var; 
    } 

} 
?> 

Heere $ objtest被測試()類的對象:

$objtest=new test(); 

echo $objtest->test1(),"<br/>"; 
$objtest->test3("GREEN"); 
echo $objtest->test1(),"<br/>"; 
echo "<br/>"; 

echo $objtest->stest1(),"<br/>"; 
$objtest->stest3("S_GREEN"); 
echo $objtest->stest1(),"<br/>"; 

test::$s_var="S_BLUE"; 
echo $objtest->stest1(); 

會讓人產生以下輸出

RED 
GREEN 

S_RED 
S_GREEN 
S_BLUE 

使用靜態變量(test :: $ s_var)你可以實現你想要的。 如果你對自己和$有任何困惑,那麼你可以閱讀這document

相關問題