2017-12-09 7 views
0

プロパティとメソッドがプライベートで保護されている単一の特性は見たことがありません。特性はプライベートで保護された可視性を持つプロパティとメソッドを持つことができますか?形質にコンストラクタ、デストラクタ、クラス定数を持たせることはできますか?

私が形質に取り組むたびに、私はあらゆる特性に宣言されたすべての特性とメソッドが常に公にしかないことを観察しました。

形質には、プライベートで保護された可視性を持つプロパティとメソッドがありますか?はいの場合、クラス内で/他の特性の中でそれらにアクセスする方法は?いいえ、なぜですか?

形質にコンストラクタとデストラクタが定義/宣言されている可能性がありますか?はいの場合、クラス内でアクセスするにはどうすればいいですか?いいえ、なぜですか?

形質が定数を持つことができ、私は別の可視性を持つクラス定数のような意味ですか?はいの場合、クラス内/他の特性の中でどうやって?いいえ、なぜですか?

特記事項:これらの概念を示す適切な例を使用して質問に答えてください。

答えて

0

特性はプライベートで保護された可視性を持つプロパティとメソッドを持つことができます。あなたはクラス自体に属しているようにそれらにアクセスできますが、違いはありません。 形質はコンストラクタとデストラクタを持つことができますが、形質自体ではなく、形質を使用するクラス用です。

特性は定数を持つことができません。また、PHPではprivateまたはprotected constはありません。

trait Singleton{ 
    //private const CONST1 = 'const1'; //FatalError 
    private static $instance = null; 
    private $prop = 5; 

    private function __construct() 
    { 
     echo "my private construct<br/>"; 
    } 

    public static function getInstance() 
    { 
     if(self::$instance === null) 
      self::$instance = new static(); 
     return self::$instance; 
    } 

    public function setProp($value) 
    { 
     $this->prop = $value; 
    } 

    public function getProp() 
    { 
     return $this->prop; 
    } 
} 

class A 
{ 
    use Singleton; 

    private $classProp = 5; 

    public function randProp() 
    { 
     $this->prop = rand(0,100); 
    } 

    public function writeProp() 
    { 
     echo $this->prop . "<br/>"; 
    } 
} 

//$a1 = new A(); //Fatal Error too private constructor 
$a1 = A::getInstance(); 
$a1->writeProp(); 
echo $a1->getProp() . "<br/>"; 
$a1->setProp(10); 
$a1->writeProp(); 
$a1->randProp(); 
$a1->writeProp(); 
$a2 = A::getInstance(); 
$a2->writeProp(); 
$a2->randProp(); 
$a2->writeProp(); 
$a1->writeProp(); 
関連する問題