Open12

【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎(バックエンド編)を勉強

okashunokashun

グローバル変数をスコープ内で扱う方法

$num = 0;
function add($index) {
  global $num; // グローバルにする
  $num += $index;
return $num;
}
okashunokashun

関数やif文内でconstを使用して定数を定義できない。
defineを使う必要がある。

if(true) {
// const TAX_RATE = 0.1;
define("TAX_RATE", 0.1);
}
okashunokashun

保存場所
const:名前空間
define:グローバルスコープ

okashunokashun

定数が定義されているか確認する
defined

okashunokashun

ファイルの読み込み方
require:エラーが出た場合、後続のコードを実行しない
include:エラーが出た場合、後続のコードを実行する

  • 使い分け
    絶対的に必要なファイル→require 必ずしも必要ではないファイル→include`
okashunokashun

パスの書き方

  • マジック定数
    __DIR__:現在のディレクトリ
    __FILE__:現在のファイル

dirname('ふぁいる名', 階層※default = 1):現在のファイルを出力

okashunokashun

名前空間

ファイルを読み込む方法は2つある。

  • require(include)を使う
  • 名前空間を使う方法

名前空間の定義

name space lib;

function with_tax($base_price, $tax_rate = TAX_RATE) {
    $sum_price = $base_price + ($base_price * $tax_rate);
    $sum_price = round($sum_price);
    return $sum_price;
}

名前空間の使用
2種類ある

  • 直接読み込む※バックスラッシュ必要
    $price = \lib\with_tax;(1000, 0.08)
  • useを使用する
use function lib\with_tax;
$price = with_tax(1000, 0.08);

バックスラッシュは名前空間のグローバル空間を意味する
グローバル空間とは名前空間の指定がない空間である。

okashunokashun

名前空間に定数を加える場合、define()は使用できない。constを使う

okashunokashun

クラス

  • クラスとは?
    オブジェクトの設計書(雛形)
    プロパティ:オブジェクトの変数
    メソッド:オブジェクトの関数

インスタンス化:クラスからオブジェクトを生成するとき
→実体にする

$obj = new Person;

アクセスの範囲を指定する
private:クラス内空しかアクセスできない
publie:クラス外からアクセスできる

メソッドの場合はpublicを明示する必要はない。

thisとは

function __constract($name, $age) {
 $this->name = $name;
 $this->age = $age;
}
class Person {
function hello() {
 echo 'hello, ' . $this->name;
}
}

thisとは**"インスタンス化された"**という意味。この場合nameはPersonkクラスがインスタンス下された時のnameを意味する。

コンストラクト

インスタンス化された時に実行される関数
インスタンス化するときに渡ってきた引数をそれぞれのオブジェクトに格納する。

okashunokashun

thisの詳細

class Person 
{
  public $name;
    public $age;

    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;

    }
function hello() {
return $this;
 function bye() {
        echo 'bye, ' . $this->name;
        return $this;
    }
}

$bob = new Person('Bob', 18);
return $thisは$bobが返ってくる。
そのため、
`$bob->hello())->bye();`は実質`$bob->bye()`と同じになる

return thisはbobが返ってくる。
そのため、
$bob->hello())->bye();は実質$bob->bye()と同じになる

okashunokashun

staticメソッド

簡単に言うならクラス自体のメソッド

それぞれのオブジェクトにはプロパティとメソッドを保持するが、staticメソッドとstaticプロパティは保持しない。

staticメソッドとメソッドの使い分け
→thisをメソッド内で使うかどうか

静的プロパティの使い方
→全てのオブジェクトで共通して使い、オブジェクトによって変更する必要のないプロパティに使用する

staticメソッドの呼び出し方

{クラス}::{静的メソッド}
ex:Person::bye()
okashunokashun

クラスの継承

継承クラスで上書きされた関数やstaticメソッド、プロパティが優先される。
protected:自クラスと継承クラスでアクセス可能

継承の仕方

class Japanese extends Person

final:子クラスでメソッドを上書き不可能にする
abstract:子クラスでメソッドを必ず上書きする

abstractを使う理由
static親クラスで使う場合、継承先(子クラス)を参照する
self:親クラスで使う場合、継承先ではなく、親クラスを参照する
子クラスで使う場合はstaticselfの挙動に違いはない。
parent:継承元のメソッドやプロパティを参照する