0

オブジェクト指向の PHP プログラミングを理解しようとしており、学習する小さなクラスを作成しました。意図したとおりに機能しない理由を理解するのに苦労しています。クラス メソッド内に 2 つの変数hello() $result$test. これらの 2 つの変数に格納されているデータにアクセスして、画面に出力しようとしています。メソッド内でエコーを呼び出すことができることはわかっていますが、メソッドの外側でエコーさせようとしています。

画面に出力さ88れるのは、2 番目の variable が出力されないことです$test。なぜそれが起こっているのかを理解しようとしています。私の理解不足はおそらくコードに現れています。

<?php

class simpleClass{

    public function hello($result,$test) {
        $result = 4+4;
        $test = 10+5;
        return $result;
        return $test;
    }
}

$a = new simpleClass;
echo $a->hello();
echo $a->hello($result, $test);

?>
4

4 に答える 4

2

listまたはを返すことができますarray

public function hello($result,$test) {
        $result = 4+4;
        $test = 10+5;
        return array($result, $test);
    }
于 2013-09-13T02:06:15.793 に答える
1

パラメータ参照を使用:

class simpleClass{

    public function hello(&$result, &$test) {
        $result = 4+4;
        $test = 10+5;
    }
}

$a = new simpleClass;
$result=''; $test='';

$a->hello($result, $test);

echo $result;
echo '<br>';
echo $test;

8
15

明確にするために&、関数のパラメーターに追加すると、そのパラメーターの値は、関数内で変更または操作すると、渡された元の変数に戻されます。したがって、結果を返す必要さえありません。それをarrayorにパックし、stdObject後でアンパックするとします。ただし、関数から何かを返すことはできます。

$ok = $a->hello($result, $test);

たとえば、計算が正しく行われたかどうかを示すフラグとして。

于 2013-09-13T02:09:01.630 に答える
1

return仕組み上、同じ関数に複数のステートメントを含めることはできませんreturn。ステートメントが検出されるreturnと、関数はそこで実行を停止し、呼び出し元に戻ります。関数の残りの部分は実行されません。

于 2013-09-13T02:06:56.417 に答える
1

複雑な答えは、モデルを使用することです。

class simpleResultTestModel {
    public $result;
    public $test;
    public function __construct($result,$test) {
        $this->result = $result;
        $this->test = $test;
    }
}

class simpleClass {
    public function hello($result=4, $test=10) {
        $result = $result+4;
        $test = $test+5;
        return new simpleResultTestModel($result, $test);
    }
}

simpleClass->hello()このようにして、常に のインスタンスを返すことがわかりますsimpleResultTestModel

また、hello メソッドの定義を更新しました。2 つのパラメーターがありますが、実際には適用しません。私は自由にデフォルト値を設定し、それを計算に使用しました。

使用法:

$a = new simpleClass();

$first = $a->hello();
echo $first->result;
echo $first->test;

$second = $a->hello($first->result,$first->test);
echo $second->result;
echo $second->test;

正当な理由がない限り、(特にクラス定義内で) 参照渡しを避けるようにします。クラスのインスタンスを作成するときの悪い習慣です(つまり、「スティッキー値」)。

于 2013-09-13T02:23:42.770 に答える