web-dev-qa-db-ja.com

パブリッククラス変数の設定

パブリック変数を設定するにはどうすればよいですか。これは正しいです?:

class Testclass
{
  public $testvar = "default value";

  function dosomething()
  {
    echo $this->testvar;
  }
}

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething();
13
Cudos

これが方法ですが、その変数のゲッターとセッターを書くことをお勧めします。

class Testclass

{
    private $testvar = "default value";

    public function setTestvar($testvar) { 
        $this->testvar = $testvar; 
    }
    public function getTestvar() { 
        return $this->testvar; 
    }

    function dosomething()
    {
        echo $this->getTestvar();
    }
}

$Testclass = new Testclass();

$Testclass->setTestvar("another value");

$Testclass->dosomething();
26
marvin

コンストラクタを使用します。

<?php
class TestClass
{
    public $testVar = "default value";
    public function __construct($varValue)
    {
       $this->testVar = $varValue;               
    }
}    
$object = new TestClass('another value');
print $object->testVar;
?>
5
Srikar Doddi
class Testclass
{
  public $testvar;

  function dosomething()
  {
    echo $this->testvar;
  }
}

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething(); ////It will print "another value"
4
Gurunatha Dogi

与えられた例に従う(ゲッター/セッターを使用するか、コンストラクターで設定する)場合は、変数に設定されているものを制御する方法であるため、プライベートに変更してください。

クラスに追加されたすべてのものでプロパティをパブリックにしておくのは意味がありません。

0
AntonioCS

内側class Testclass

public function __construct($new_value)
{
    $this->testvar = $new_value;
}
0
ntd

その変数/属性の値を「設定」しています。それをオーバーライドまたはオーバーロードしないでください。あなたのコードは非常に、非常に一般的で正常です。

これらすべての用語(「セット」、「オーバーライド」、「オーバーロード」)には特定の意味があります。オーバーライドとオーバーロードは、ポリモーフィズム(サブクラス化)に関するものです。

から http://en.wikipedia.org/wiki/Object-oriented_programming

ポリモーフィズムにより、プログラマーは派生クラスのメンバーを親クラスのメンバーのように扱うことができます。より正確には、オブジェクト指向プログラミングのポリモーフィズムは、異なるデータ型に属するオブジェクトが同じ名前のメソッドのメソッド呼び出しに応答する能力であり、それぞれが適切な型固有の動作に従っています。 1つのメソッド、または+、-、*などの演算子は、さまざまな状況で抽象的に適用できます。犬がspeak()を命じられた場合、これはbark()を引き出すかもしれません。ただし、Pigがspeak()を使用するように命令された場合、これはoink()を引き出す可能性があります。どちらもAnimalからspeak()を継承しますが、それらの派生クラスメソッドは親クラスのメソッドをオーバーライドします。これは、ポリモーフィズムのオーバーライドです。ポリモーフィズムのオーバーロードは、1つのメソッドシグネチャ、または "+"などの1つの演算子を使用して、実装に応じていくつかの異なる機能を実行することです。たとえば、「+」演算子は、整数加算、浮動小数点加算、リスト連結、または文字列連結を実行するために使用できます。 IntegerやDoubleなど、Numberの2つのサブクラスは、OOP言語で正しく追加されることが期待されています。したがって、この方法で機能するには、言語で追加演算子 "+"をオーバーロードする必要があります。これはコードの可読性の向上に役立ちます。これの実装方法は言語によって異なりますが、ほとんどのOOP言語は、少なくともある程度のオーバーロードのポリモーフィズムをサポートしています。

0
Scott Saunders

オーバーロードするには、サブクラスが必要です。

class ChildTestclass extends Testclass {
    public $testvar = "newVal";
}

$obj = new ChildTestclass();
$obj->dosomething();

このコードはnewValをエコーし​​ます。

0
Wim

Getterおよびsetterメソッドをクラスに追加します。

public function setValue($new_value)
{
    $this->testvar = $new_value;
}

public function getValue()
{
    return $this->testvar;        
}
0
Zaje