2012-03-28 4 views
1

좋아요, 여기 정확히 무슨 일이 일어나는지 모르겠지만 PHP를 사용하여 클래스를 포함하려고한다는 사실과 관련이 있다고 생각합니다. "include $ file) "함수를 호출합니다.클래스 변수가 설정되지 않음 (PHP)

함수 가져 오기는 다음과 같습니다

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

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

php.buffer.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; 
    } 
?> 

내가 할 모든 내 index.php 파일에 다음 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

어떤 문제가 있습니까? –

답변

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"; 버퍼 변수를 설정하고 가져옵니다. 그것은 지금 나를 위해 일하는 것 같다. –

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; 
     } 
} 

해야한다고 생각 메서드 내부의 변수

관련 문제