3

試しましたが、変数$this->に値を割り当てることができませんでした。$first_name and $last_name関数の静的機能を削除せず、変数に静的機能を挿入せずに、どのようにエコーできfull_name()ますか?コードは次のとおりです。

<?php

class User  {

    public $first_name;
    public $last_name;

  public function full_name() {
    if(isset($this->first_name) && isset($this->last_name)) {
    return $this->first_name . " " . $this->last_name;
    } else {
    return "No name!";
    }
   }

  public static function verify() {

    $this->first_name = "firstname";
    $this->last_name =  "last_name";
   }
  }

$user = new User();
User::verify();
echo $user->full_name()

?>
4

2 に答える 2

7

できません。verifyメンバー関数を作成して、次のように呼び出してみませんか

$user->verify();

もう1つの方法は、次のようにユーザーを検証機能に渡すことです。

public static function verify( $user ) {
   $user->first_name = 'firstname';
   $user->last_name = 'last_name';
}

そしてそのように電話します:

User::verify($user)
于 2012-06-05T20:42:29.873 に答える
4

あなたは本当に...静的関数のポイントを無効にするシングルトンパターンを使用する以外はできません。

基本的な考え方は、静的関数はインスタンスを必要としないということですが、あなたがやろうとしていることは必要です。
非静的セッター関数またはコンストラクターでデータを検証することをお勧めします。または、必要に応じて、静的ではない public メソッド verify を追加します。
考えてみてください: statics はインスタンスを必要としないので、インスタンスがない場合 (したがって " $this"がない場合)、何を検証しますか?

于 2012-06-05T20:45:01.857 に答える