2009-03-01 4 views
0
class hello { 

    var $fname; 
    var $lname; 

    function attrib() { 
    $this->fname = "sarmen"; 
    $this->lname = "dijango"; 
    } 

    function say() { 
    $name = $this->fname.", ".$this->lname; 
    return $name; 
    } 
} 

에서 내 시도는이 내 샘플 클래스입니다;
$ d-> say()클래스

아무 것도 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

감사합니다.

+0

코드 앞에 4 개의 공백을 넣으면 올바른 서식을 지정할 수 있습니까? 그것은 많은 도움이 될 것입니다. –

+0

PHP4 또는 PHP5를 실행하고 있습니까? 이전 PHP4 방식이므로 PHP4 지원이 종료되었습니다. php.net/oop을 참조하십시오. – raspi

답변

4

"say"는 문자열을 반환합니다. 실제로 아무 것도하지 않습니다. 그걸 인쇄해야하지 않습니까?

7

attrib은 마치 constructor 인 것처럼 처리하고 있지만 그 값은 __construct으로 지정해야합니다. 당신처럼 보이는 뭔가를했을 attrib 방법 대신 다음

$myobject = new hello('my first name', 'my last name'); 
print $myobject->say(); 

그리고 : 그러나, 일반적인 같은 것을 볼 수있다

$myobject = new hello(); // create new object 
$myobject->attrib(); // set the vars 
print $myobject->say(); 

: * 그렇지 않으면, 당신은이 작업을 수행 할 필요가 이 :

function __construct($fname, $lname) { 
    $this->fname = $fname; 
    $this->lname = $lname; 
} 

* 당신이이 경우에 당신이 당신의 생성자 클래스 이름과 동일한 이름을 필요 PHP4를 사용하지 않는.

+0

생성자가 누락되었습니다.하지만 어쨌든 쉼표를 가져와야합니다. 맞습니까? –

+0

무엇을 의미합니까? –

+0

그는 print class를 사용하여 클래스를 떠나는 경우 $ name이 쉼표로 채워지기 때문에 $ myobject-say()는 하나의 쉼표를 출력해야 함을 의미합니다. 이것은 사실입니다. – Stuart

1

하는 것보십시오 :

$var=$d->say(); 
echo $var; 
4

이 시도 : 그 너머

$d = new hello(); 
$d->attrib(); 
print $d->say(); 

을, 당신은 이와 같은 몇 가지 개선 할 수있다 :

class hello { 

    var $fname; 
    var $lname; 

    public function __construct() { 

     $this->fname = "sarmen"; 
     $this->lname = "dijango"; 

    } 

    public function say() { 

     $name = $this->fname.", ".$this->lname; 

     return $name; 

    } 
} 
+0

좋아, 고마워. –

1

그들은 방법으로 당신이 지금이를 , 전화 할 경우 :

말()는 단순히 값을 반환하기 때문에3210

아무런 변화가 없습니다 ... 다음과 같이 제한 값이 에코 또는 인쇄해야합니다

 
$d = new hello(); 
echo $d->say(); 

을하지만 당신은 $ 이름 만 출력 할당 쉼표 것이다. $ this-> fname과 $ this-> lname의 값은 채워지지 않으므로 반환 할 내용이 없습니다.

하지만 잠시 기다려주십시오 ... 그 메소드의 attrib()가 있습니다. 그 변수를 채우지 않아야합니까? 대답은 '예'이지만 전화를해야합니다. 그래서 예를 들어 다음을 사용하여 당신이 원하는 걸 얻을 것이다 :

 
$d = new hello(); //instantiates the class 
$d->attrib();  //calls attrib() thus assigning those values 
echo $d->say(); //echos out the values returned by say() 

은 가장 중요한, 그러나,이다이 정말 이런 일을 할 수있는 가장 좋은 방법은 아니라고 사실 그. Paolo와 jonstjohn이 제공하는 답변은이 문제를 해결하는 가장 좋은 방법을 보여 주며 매번 성과 이름의 값을 변경할 수 있으므로 Paolo 's가 가장 융통성이 있습니다.