PHPの特性
はじめに
PHPは多重継承をサポートしていません。この制限は、特性の機能によってある程度克服されます。 。これは、コードの再利用のメカニズムです。特性の定義はクラスに似ています。ただし、直接インスタンス化することはできません。代わりに、トレイトの機能は、使用によってクラスで利用できるようになります。 キーワード。したがって、クラスはトレイトで定義されたメソッドを利用したり、それらをオーバーライドしたりすることもできます。これは、継承している可能性のある他の親クラスに追加されます。
特性もインターフェースに似ています。違いは、インターフェイスがその内部のメソッドの定義を提供しないことです。これは、クラスを実装することによって実行する必要があります。ただし、トレイトメソッドは定義を提供します。定義は、トレイトを使用するクラスによってオーバーライドされる場合とされない場合があります。
構文
<?php
trait testtrait{
public function test1(){
//body of method
}
}
//using trait
class testclass{
use testtrait
//rest of members in class
}
?> 例
次のコードでは、2つのメソッドを持つトレイトが、メソッドの1つをオーバーライドするクラスで使用されています
例
<?php
//definition of trait
trait testtrait{
public function test1(){
echo "test1 method in trait\n";
}
public function test2(){
echo "test2 method in trait\n";
}
}
//using trait
class testclass{
use testtrait;
public function test1(){
echo "test1 method overridden\n";
}
}
$obj=new testclass();
$obj->test1();
$obj->test2();
?> 出力
出力は以下のとおりです-
test1 method overridden test2 method in trait
子クラスの特性
これが特性の主な利点です。親を持つクラスもトレイトを使用でき、そのメソッドをオーバーライドすることを選択できます。したがって、効果的に多重継承を実現します。この機能の例を以下に示します-
例
<?php
//definition of trait
trait testtrait{
public function test1(){
echo "test1 method in trait\n";
}
}
//parent class
class parentclass{
public function test2(){
echo "test2 method in parent\n";
}
}
//using trait and parent class
class childclass extends parentclass{
use testtrait;
public function test1(){
echo "parent method overridden\n";
}
public function test2(){
echo "trait method overridden\n";
}
}
$obj=new childclass();
$obj->test1();
$obj->test2();
?> 出力
上記のコードは次の結果を生成します-
parent method overridden trait method overridden
インターフェースを備えた特性
インターフェイスを実装し、他の親クラスを拡張し、同時にトレイトを使用するクラスを持つことが可能です
例
<?php
//definition of trait
trait mytrait{
public function test1(){
echo "test1 method in trait1\n";
}
}
class myclass{
public function test2(){
echo "test2 method in parent class\n";
}
}
interface myinterface{
public function test3();
}
//using trait and parent class
class testclass extends myclass implements myinterface{
use mytrait;
public function test3(){
echo "implementation of test3 method\n";
}
}
$obj=new testclass();
$obj->test1();
$obj->test2();
$obj->test3();
?> 出力
これにより、次の出力が生成されます-
test1 method in trait1 test2 method in parent class implementation of test3 method
競合の解決
クラスが共通のメソッドで2つのトレイトを使用する場合、それらの競合はスコープ解決演算子によって解決され、代わりに キーワード
例
<?php
trait trait1{
public function test1(){
echo "test1 method in trait1\n";
}
public function test2(){
echo "test2 method in trait1\n";
}
}
trait trait2{
public function test1(){
echo "test1 method in trait2\n";
}
public function test2(){
echo "test2 method in trait2\n";
}
}
//using trait and parent class
class testclass {
use trait1, trait2{
trait1::test1 insteadof trait2;
trait2::test2 insteadof trait1;
}
}
$obj=new testclass();
$obj->test1();
$obj->test2();
?> 出力
上記のスクリプトは次の結果を生成します
test1 method in trait1 test2 method in trait2
-
PHP pi()関数
定義と使用法 pi ()関数は数学定数Πの値を返します。 PHPで定義された事前定義された定数に等しいfloat値3.14159265359を返します--M_PI 構文 pi ( void ) : float パラメータ この関数はパラメータを必要としません 戻り値 PHP pi()関数は、数学定数Πを返し、事前定義された数学定数M-PIと同じです。 M_PIを使用する代わりに、数式でpi()関数を使用できます。 PHPバージョン この関数は、PHPバージョン4.x、PHP 5.x、およびPHP7.xで使用できます。 例 次の例では、円の面積の計算にpi()関数を使用しています。
-
PHPの特徴は何ですか?
5.4では、PHPバージョンの特性がPHPオブジェクト指向プログラミングに導入されています。トレイトはクラスに似ていますが、メソッドをきめ細かく信頼できる方法でグループ化するためだけのものです。トレイトを単独でインスタンス化することは許可されていません。特性は、単一継承の問題を克服するためにPHP5.4に導入されています。単一の継承クラスで知っているように、他の1つの単一クラスからのみ継承できます。トレイトの場合、開発者は、異なるクラス階層に存在するいくつかの独立したクラスでメソッドのセットを自由に再利用できます。 例 <?php trait Reader{ &