Stilly

Stilly

بېكەت باشلىقى

يازمىلىرى
ئەگەشكۈچىلىرى
ئەگەشكەنلىرى
74
32
0

php دىكى Trait ھەققىدە

php دىكى  trait بولسا php5.4 كىيىن يېڭى قوشۇلغان ئىقتىدار بولۇپ، كودنى تەكرار ئىشلىتىشنى تېخىمۇ قولايلاشتۇرغان بىر ئىقتىداردىن ئىبارەت . يەنى php نىڭ ئۆزى تاق ۋارىسلىق (单继承) تىپىدىكى تىل بولۇپ،بىر كىلاس (类) تەڭلا ۋاقىتتا ئىككى ئانا كىلاسقا ۋارىسلىق قىلالمايدۇ.شۇڭلاشقا php نىڭ 5.4 نەشىرىدىن تارتىپ Go تېلىنىڭ كودنى تەكرار ئىشلتىش ئەندىزىسىگە تەقلىد قىلىپ  trait ئىقتىدارى قوشۇلدى.


مەسىلەن تۆۋەندىكى بىر مىسالغا قارايلى .بىر كىلاس (类) تەڭلا ۋاقىتتا ئىككى ئانا كىلاسقا ۋارىسلىق قىلالمايدۇ

ئەمدى يەنە تۆۋەندىكى كودقا قارايلى .

ئاۋۋال trait ھالقىلىق سۆزى ئارقىلىق بىر trait  قۇرۇلمىسى ئىنىقلايمىز.

ئاندىن use ھالقىلىق سۆزى ئارقىلىق trait  نى ئىشلىتىمز.


<?php
//声明trait
trait Oyghan
{
    //trait属性
    public $site = 'http://www.oyghanbeg.com';

    //trait方法
    public function write()
    {
        echo "I am writing...\n\r";
    }
}

//父级类
class Person
{
    public function read()
    {
        echo "I am reading...\n";
    }
}

//子类
class Child extends Person
{
    //实例化trait
    use Oyghan;

    public function study()
    {
        echo "I am studying...\n";
    }
}
//实例化
$obj = new Child();
$obj->read();
$obj->study();
$obj->write();


يۇقارقى كودنى ئىجرا قىلساق نەتىجسى تۆۋەندەك بولىدۇ.


I am reading...
I am studying...
I am writing...


دىمەك يۇقارقى كودتا Child تۈرى Person تۈرىگە ۋارىسلىق قىلىش ئارقىلىق study ناملىق فۇنكىسيەگە ،trait Oyghan نى use  قىلىش ئارقىلىق $site ئوبىكتى ۋە write فۇنكىسىيىسىگە ئىگە بولدى.



Trait ۋە تۈرنىڭ ئالدى كىيىنلىك تەرتىپى 

ناۋا Trait ۋە ئانا تۈر،بالا تۈرنىڭ ئىچىدە ئوخشاش نامدىكى فۇنكىسىيە ياكى ئوبىكىت بوپ قالسا زادى قايسىسى ئىشلىتىلىدۇ ؟

بىز داۋاملىق تۆۋەندىكى كودقا قاراپ باقايلى .

<?php
//声明trait
trait Oyghan
{
    //trait属性
    public $site = 'http://www.oyghanbeg.com';

    //trait方法
    public function write()
    {
        echo "I am writing...\n\r";
    }

    public function hello()
    {
        echo "I am hello from trait oyghan";
    }
}

//父级类
class Person
{
    public function read()
    {
        echo "I am reading...\n";
    }

    public function hello()
    {
        echo "I am hello from class Person";
    }
}

//子类
class Child extends Person
{
    //实例化trait
    use Oyghan;

    public function study()
    {
        echo "I am studying...\n";
    }
    public function hello()
    {
        echo "I am hello from class Child";
    }
}
//实例化
$obj = new Child();
$obj->hello();


يۇقارقى كودتا Trait ۋە ئانا تۈر،بالا تۈرنىڭ ئىچىدە ئوخشاش نامدىكى فۇنكىسىيە hello بار ،كودنىڭ ئىجرا نەتىجىسى تۆۋەندىكىدەك بولىدۇ.


I am hello from class Child


دىمەك شۇنى يەكۈنلەشكە بولىدۇكى Trait ۋە ئانا تۈر،بالا تۈرنىڭ ئىچىدە ئوخشاش نامدىكى فۇنكىسىيە ياكى ئوبىكىت بوپ قالسا ھازىرقى تۈر Trait تىكى ئوخشاش ناملىق فۇنكىسىيەنى قاپلىۋىتىدۇ ھەم Trait مۇ ئانا تۈر ئىچىدىكى ئوخشاش ناملىق فۇنكسىيەنى قاپلىۋىتىدۇ.



كۆپ Trait نى ئىىشلىتىش

تۆۋەندىكى كودقا قاراپ باقايلى 


<?php

trait Trait1
{
    public function hello()
    {
        echo "hello ";
    }
}

trait Trait2
{
    public function world()
    {
        echo "world";
    }
}
class class1
{
    use Trait1,Trait2;
}

$obj = new class1();
$obj->hello();
$obj->world();


دىمەك بىر تۈر بىرلا ۋاقىتتتا كۆپلىگەن Trait نى ئىشلىتەلەيدۇ.


داۋامى بار ...