2

次のコードでエラーが発生します

     class Myclass {
              //...variables

              public function getName() {
                       return $this->strName;
              }

              public function checkDup() {
                      if(empty($this->getName())) {  //HERE IS THE ERROR
                        $strMessage = 'Please Enter First Name';
                        return $strMessage;
                      }
              }
     }

     $a = new Myclass (); //assume constructor is present and variables are set in class
     $a->checkDup();

解決策は何でしょうか?getName()関数は変数の名前を返します

4

4 に答える 4

2

ここで何がうまくいかなかったのか理解しました。

$ thisを使用してクラスメンバー変数を参照し、クラス内でgetName()関数を再度呼び出さないようにする必要があります。これにより、関数が次のように変更されます。

          public function checkDup() {
                  if(empty($this->strName)) {  //HERE IS THE SOLUTION
                    $strMessage = 'Please Enter First Name';
                    return $strMessage;
                  }
          }
于 2012-12-14T14:50:29.603 に答える
1

変化する:

if(empty($this->getName())) {

$name = $this->getName();
if( empty($name) ) {
...

empty()は変数のみをチェックします。それ以外の場合は、解析エラーが発生するためです。

于 2012-12-11T11:28:02.023 に答える
0

構成はそのemptyように少しばかげています。マニュアルを参照してください:

ノート:

PHP 5.5より前では、empty()は変数のみをサポートしていました。それ以外の場合は、解析エラーが発生します。つまり、次は機能しません:empty(trim($ name))。代わりに、trim($ name)==falseを使用してください。

于 2012-12-11T11:52:36.373 に答える
0

ここでの答えはどれも好きではありません。はい、$this->strName直接参照できます。しかし、できない場合はどうなりますか?getName()重要な機能がある場合はどうなりますか?

次に、唯一のオプションは別の変数を作成することですか?$var = $this->getName();。それも悪い。

一般に、クラスのプロパティまたは関数に動的にアクセスするときは常に、中かっこで囲みます{}

  1. ダイナミックだとわかります。
  2. 意味のあるエラーがある場合は、エラーが発生します。

例:

$this->{$variable};
$this->{$class->property};
$this->{$class->method()};
$this->{function()};
$this->{$array['index']};
于 2013-11-17T10:50:54.373 に答える