PHP-класс не отображает возвращаемое значение - PullRequest
0 голосов
/ 01 марта 2009
class hello {

  var $fname;
  var $lname;

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

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

Это мой пример класса, когда я включаю класс на страницу и набираю что-то вроде этого

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

Ничего не происходит. Что я делаю не так?

Ответы [ 5 ]

7 голосов
/ 01 марта 2009

Вы обрабатываете метод attrib, как если бы он был конструктором , но вам нужно назвать его __construct, чтобы он вел себя так. * В противном случае вам нужно выполнить это:

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

Однако чаще можно увидеть что-то вроде этого:

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

И тогда вместо attrib метода вы получите что-то похожее на это:

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

* Если вы не используете PHP4, в этом случае вам нужно назвать конструктор так же, как имя класса.

4 голосов
/ 01 марта 2009

Попробуйте это:

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

   }
}
4 голосов
/ 01 марта 2009

«say» возвращает строку. Вы на самом деле ничего не делаете с этим. Разве вы не должны распечатать это или что-то?

1 голос
/ 01 марта 2009

Они такие, какие есть у вас сейчас, если вы позвоните:

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

Ничего не происходит, потому что say () просто возвращает значение ... Вам нужно отобразить или вывести это значение следующим образом:

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

Но это выведет только ту запятую, которую вы присвоили $ name. Значения $ 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 - самый гибкий, поскольку вы можете каждый раз менять значения имени и фамилии.

1 голос
/ 01 марта 2009

Попробуйте пойти:

$var=$d->say();
echo $var;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...