PHP的类和对象

有一种被称为「函数式」语言,而PHP是「面向对象」的。
据说在统计等领域更适合使用「函数式」,而在提取和显示数据方面更适合使用「面向对象」。

面向对象的

创建实例的那个。
可以创建Person类的实例,比如Bob或Mary。

创建一个班级

<?php

namespace App;

class TaskService {

    //プロパティ
    public $hoge;

    //メソッド
    public function hoge(){
    }

}

使用课程

在PHP中,要调用属性和方法可以使用箭头(->)。

Route::get('/', function(){
    $hhoge = new TaskService();

    $hoge->hoge;
    $hoge->hoge();

    return "hogehoge";
});

带有默认值

<?php

namespace App;

class TaskService {

    public $hoge;

    public function hoge($arg1, $arg2=null){
    }

}

如果要给默认值,则将其放在后面。

受保护的、公有的、私有的/静态的

保护

只能在类内或继承类中调用。

公开

可以从其他地方进行调用。

私密的

只能在类内部调用。

静态的有点不同类型。

    • new Person

 

    Person::

决定在哪里进行调用。

塑造形状

<?php

namespace App;

class TaskService {

    public $hoge;

    public function hoge(bool $arg1,array $arg2=null): array
    {
    }

}

当返回类型为数组时,称之为返回类型提示。
如果没有返回值,则可以使用 :void。

班级的角色

    • 処理

 

    データ

让我们明确一下要进行哪个课程。

处理数据的类:实体

将数组数据解析成

<?php


namespace App;

class TaskInfo
{
    public $name;
    public $important;

通过假设,就能够像 name 一样得到。

<?php

namespace App;

class TaskService {

    public $hoge;

    public function hoge(TaskInfo $arg1,array $arg2=null): array
    {
        $name = $arg1->name;
    }

}

构造函数

<?php


namespace App;
use App\TaskInfo;

class TaskService
{
    public $name;
    public $important;

    public function __construct(
        TaskInfo $task
    ){
        $this->task = $task;
    }

对于每个

    $props = ["name", "title"];

    foreach($props as $propName){
        $this->{$propName};
    }
    $methodName = "piyo";

    $this->$methodName();

类的继承 de jì

使用extends。
如果不写任何内容来创建与父方法相同的方法,那么父内容将不会被执行。
当以parent方式调用如下时,可以添加各种其他描述到父方法中。

<?php


namespace App;

class TaskInfo extends Model
{

    public function save(array $options = []){
        parent::save($options);
        //do something...
        return [];
    }
}

PHP的重载

听说PHP的重载与一般的重载完全不同。

对象可被视为一个字符串


public function __toString(){
    return "this is task Service";
}

作成できる

public function __invoke(){
    return "hogehoge";
}

另外还有一些其他的

    • __get

 

    __call
广告
将在 10 秒后关闭
bannerAds