2012-03-28 89 views
1

好的,我不確定100%這裏發生了什麼,但我認爲它與我試圖包含一個類使用PHP的「包括( $文件)「功能。類別變量不停留設置(PHP)

功能導入看起來是這樣的:

<?php 
function import($file) { 
    global $imported; $imported = true; 
    $home_dir = "C:/xampp/htdocs/includes/"; 
    if (file_exists($home_dir.$file.".php")) { 
     include_once($home_dir.$file.".php"); 
     } 
    $imported = false; 
    } 
?> 

我要做的就是調用下面的PHP在我的index.php文件:

<?php 
import("php.buffer"); 

$out = new StringBuffer; 
$out->write("test?"); 
echo "'".($out->get())."' &lt;- Buffer String Should Be Here"; 
?> 

的php.buffer.php文件看起來像這樣:

<?php 
class StringBuffer { 
    public $buffer = ""; 

    public function set($string) { 
     if (!isset($buffer)) { $buffer = ""; } 
     $buffer = $string; 
     } 

    public function get() { 
     if (!isset($buffer)) { $buffer = ""; } 
     return $buffer; 
     } 

    public function write($string) { 
     if (!isset($buffer)) { $buffer = ""; } 
     $buffer = $buffer.chr(strlen($string)).$string; 
     } 

    public function read() { 
     if (!isset($buffer)) { $buffer = ""; } 
     $return = ""; 
     $str_len = substr($buffer,0,1); $buffer = substr($buffer,1,strlen($buffer)-1); 
     $return = substr($buffer,0,$str_len); $buffer = substr($buffer,$str_len,strlen($buffer)-$str_len); 

     return $return; 
     } 

    public function clear() { 
     $buffer = ""; 
     } 

    public function flushall() { 
     echo $buffer; 
     $this->clear(); 
     } 

    public function close() { 
     return new NoMethods(); 
     } 
    } 
?> 

當我創建新的StringBuffer類我沒有得到任何錯誤,所以我知道它確實是我包括我的文件。

+0

你面臨什麼問題? – 2012-03-28 08:41:10

回答

2

這裏發生的是在你的類方法中,而不是訪問你正在獲取的屬性($this->buffer),並設置局部變量($buffer),所以變化不會「粘住」。

該代碼也可以使用一些清理。有很多多餘的東西在裏面,例如:

public function set($string) { 
    // isset will never return false, so this if will never execute 
    // even if it did, what's the purpose of setting the buffer when you 
    // are going to overwrite it one line of code later? 
    if (!isset($this->buffer)) { $this->buffer = ""; } 
    $this->buffer = $string; 
} 
+0

好吧,我明白了。我不得不做$ this-> buffer =「String」;設置緩衝區變量並獲取它。這現在似乎適用於我。 – 2012-03-28 08:53:40

1

我認爲你的類應該是

class StringBuffer { 
    private $buffer = ""; 

    public function get() { 
     if (!isset($this->$buffer)) { $this->$buffer = ""; } 
     return $this->$buffer; 
     } 

    public function write($string) { 
     if (!isset($this->$buffer)) { $this->$buffer = ""; } 
     $this->$buffer = $this->$buffer.chr(strlen($string)).$string; 
     } 
} 
這樣你要設置一個類變量

,與你的代碼只是設置變量內部方法