PHP トレイト

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<span class="pun"><?</span><span class="pln">php
trait </span><span class="typ">LogTrait</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> log</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        echo </span><span class="str">"Instance created"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">use</span><span class="pln"> </span><span class="typ">LogTrait</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">private</span><span class="pln"> $subject</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">protected</span><span class="pln"> $points</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$subject</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">subject </span><span class="pun">=</span><span class="pln"> $subject</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">points </span><span class="pun">=</span><span class="pln"> $points</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">log</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getResult</span><span class="pun">();</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getInfo</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"{$this->subject}, {$this->points}, {$this->getResult()}"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">MathScore</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        parent</span><span class="pun">::</span><span class="pln">__construct</span><span class="pun">(</span><span class="str">"Math"</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getResult</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        echo </span><span class="str">"MathScore method"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">points </span><span class="pun">>=</span><span class="pln"> </span><span class="lit">50</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="str">"Pass"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"Fail"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">EnglishScore</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        parent</span><span class="pun">::</span><span class="pln">__construct</span><span class="pun">(</span><span class="str">"English"</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getResult</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        echo </span><span class="str">"EnglishScore method"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">points </span><span class="pun">>=</span><span class="pln"> </span><span class="lit">95</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="str">"Pass"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"Fail"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">User</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">use</span><span class="pln"> </span><span class="typ">LogTrait</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">private</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">private</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">,</span><span class="pln"> $score</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">name </span><span class="pun">=</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">score </span><span class="pun">=</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">log</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getInfo</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"{$this->name}, {$this->score->getInfo()}"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
$user1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Taro"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MathScore</span><span class="pun">(</span><span class="lit">70</span><span class="pun">));</span><span class="pln">
$user2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Jiro"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">EnglishScore</span><span class="pun">(</span><span class="lit">90</span><span class="pun">));</span><span class="pln">
 
echo $user1</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
echo $user2</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span>

PHP logメソッド

<?php
interface Loggable
{
    public function log();
}

abstract class Score implements Loggable
{
    private $subject;
    protected $points;

    public function __construct($subject, $points)
    {
        $this->subject = $subject;
        $this->points = $points;
        $this->log();
    }
    public function log()
    {
        echo "Instance created: {$this->subject}" . PHP_EOL;
    }

    abstract protected function getResult();

    public function getInfo()
    {
        return "{$this->subject}, {$this->points}, {$this->getResult()}";
    }
}

class MathScore extends Score
{
    public function __construct($points)
    {
        parent::__construct("Math", $points);
    }

    protected function getResult()
    {
        echo "MathScore method" . PHP_EOL;
        return $this->points >= 50 ? "Pass" : "Fail";
    }
}

class EnglishScore extends Score
{
    public function __construct($points)
    {
        parent::__construct("English", $points);
    }

    protected function getResult()
    {
        echo "EnglishScore method" . PHP_EOL;
        return $this->points >= 95 ? "Pass" : "Fail";
    }
}

class User implements Loggable
{
    private $name;
    private $score;

    public function __construct($name, $score)
    {
        $this->name = $name;
        $this->score = $score;
        $this->log();
    }
    public function log()
    {
        echo "Instance created: {$this->name}" . PHP_EOL;
    }
    public function getInfo()
    {
        return "{$this->name}, {$this->score->getInfo()}";
    }
}

$user1 = new User("Taro", new MathScore(70));
$user2 = new User("Jiro", new EnglishScore(90));

echo $user1->getInfo() . PHP_EOL;
echo $user2->getInfo() . PHP_EOL;

PHP 抽象メソッド

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<span class="pun"><?</span><span class="pln">php
</span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">private</span><span class="pln"> $subject</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">protected</span><span class="pln"> $points</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$subject</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">subject </span><span class="pun">=</span><span class="pln"> $subject</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">points </span><span class="pun">=</span><span class="pln"> $points</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getResult</span><span class="pun">();</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getInfo</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"{$this->subject}, {$this->points}, {$this->getResult()}"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">MathScore</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        parent</span><span class="pun">::</span><span class="pln">__construct</span><span class="pun">(</span><span class="str">"Math"</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="com">// protected function getResult()</span><span class="pln">
    </span><span class="com">// {</span><span class="pln">
    </span><span class="com">//     echo "MathScore method" . PHP_EOL;</span><span class="pln">
    </span><span class="com">//     return $this->points >= 50 ? "Pass" : "Fail";</span><span class="pln">
    </span><span class="com">// }</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">EnglishScore</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Score</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$points</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        parent</span><span class="pun">::</span><span class="pln">__construct</span><span class="pun">(</span><span class="str">"English"</span><span class="pun">,</span><span class="pln"> $points</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getResult</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        echo </span><span class="str">"EnglishScore method"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">points </span><span class="pun">>=</span><span class="pln"> </span><span class="lit">95</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="str">"Pass"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"Fail"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">User</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">private</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">private</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">,</span><span class="pln"> $score</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">name </span><span class="pun">=</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">score </span><span class="pun">=</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getInfo</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"{$this->name}, {$this->score->getInfo()}"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
$user1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Taro"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MathScore</span><span class="pun">(</span><span class="lit">70</span><span class="pun">));</span><span class="pln">
$user2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Jiro"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">EnglishScore</span><span class="pun">(</span><span class="lit">90</span><span class="pun">));</span><span class="pln">
 
echo $user1</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
echo $user2</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span>

PHP 子クラス

<?php
class Score
{
    private $subject;
    private $points;

    public function __construct($subject, $points)
    {
        $this->subject = $subject;
        $this->points = $points;
    }

    private function getResult()
    {
        return $this->points >= 80 ? "Pass" : "Fail";
    }

    public function getInfo()
    {
        return "{$this->subject}, {$this->points}, {$this->getResult()}";
    }
}

class MathScore extends Score
{
    public function __construct($points)
    {
        parent::__construct("Math", $points);
    }
}

class EnglishScore extends Score
{
    public function __construct($points)
    {
        parent::__construct("English", $points);
    }
}

class User
{
    private $name;
    private $score;

    public function __construct($name, $score)
    {
        $this->name = $name;
        $this->score = $score;
    }

    public function getInfo()
    {
        return "{$this->name}, {$this->score->getInfo()}";
    }
}

$user1 = new User("Taro", new MathScore(70));
$user2 = new User("Jiro", new EnglishScore(90));

echo $user1->getInfo() . PHP_EOL;
echo $user2->getInfo() . PHP_EOL;

PHP クラスメソッド

<?php
class User
{
    public $name;
    public $score;
    private static $count = 0;

    public function __construct($name, $score)
    {
        $this->name = $name;
        $this->score = $score;
        User::$count++;
    }

    public static function getUserCount()
    {
        return User::$count;
    }
}

$user1 = new User("Taro", 70);
$user2 = new User("Jiro", 90);

//User::$count++;
//echo User::$count . PHP_EOL;
echo User::getUserCount() . PHP_EOL;

PHP クラスプロパティ

<?php
class User
{
    public $name;
    public $score;
    public static $count = 0;

    public function __construct($name, $score)
    {
        $this->name = $name;
        $this->score = $score;
        User::$count++;
    }
}

// $count = 0;
$user1 = new User("Taro", 70);
// $count++;
$user2 = new User("Jiro", 90);
// $count++;

// echo $count . PHP_EOL;
echo User::$count . PHP_EOL;

PHP setScoreメソッド

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<span class="pun"><?</span><span class="pln">php
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">User</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">,</span><span class="pln"> $score</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">name </span><span class="pun">=</span><span class="pln"> $name</span><span class="pun">;</span><span class="pln">
        $this</span><span class="pun">-></span><span class="pln">score </span><span class="pun">=</span><span class="pln"> $score</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
 
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getInfo</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"{$this->name}, {$this->score}"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
$user1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Taro"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">70</span><span class="pun">);</span><span class="pln">
$user2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">(</span><span class="str">"Jiro"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">);</span><span class="pln">
 
$user1</span><span class="pun">-></span><span class="pln">score </span><span class="pun">=</span><span class="pln"> </span><span class="lit">900</span><span class="pun">;</span><span class="pln">
 
echo $user1</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span><span class="pln">
echo $user2</span><span class="pun">-></span><span class="pln">getInfo</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> PHP_EOL</span><span class="pun">;</span>