【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎(バックエンド編)を勉強
グローバル変数をスコープ内で扱う方法
$num = 0;
function add($index) {
global $num; // グローバルにする
$num += $index;
return $num;
}
関数やif文内でconstを使用して定数を定義できない。
defineを使う必要がある。
if(true) {
// const TAX_RATE = 0.1;
define("TAX_RATE", 0.1);
}
保存場所
const:名前空間
define:グローバルスコープ
定数が定義されているか確認する
defined
ファイルの読み込み方
require
:エラーが出た場合、後続のコードを実行しない
include
:エラーが出た場合、後続のコードを実行する
- 使い分け
絶対的に必要なファイル→require 必ずしも必要ではないファイル→
include`
パスの書き方
- マジック定数
__DIR__
:現在のディレクトリ
__FILE__
:現在のファイル
dirname('ふぁいる名', 階層※default = 1)
:現在のファイルを出力
名前空間
ファイルを読み込む方法は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);
バックスラッシュは名前空間のグローバル空間を意味する
グローバル空間とは名前空間の指定がない空間である。
名前空間に定数を加える場合、define()
は使用できない。const
を使う
クラス
- クラスとは?
オブジェクトの設計書(雛形)
プロパティ:オブジェクトの変数
メソッド:オブジェクトの関数
インスタンス化:クラスからオブジェクトを生成するとき
→実体にする
$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を意味する。
コンストラクト
インスタンス化された時に実行される関数
インスタンス化するときに渡ってきた引数をそれぞれのオブジェクトに格納する。
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
そのため、
$bob->hello())->bye();
は実質$bob->bye()
と同じになる
staticメソッド
簡単に言うならクラス自体のメソッド
それぞれのオブジェクトにはプロパティとメソッドを保持するが、staticメソッドとstaticプロパティは保持しない。
staticメソッドとメソッドの使い分け
→thisをメソッド内で使うかどうか
静的プロパティの使い方
→全てのオブジェクトで共通して使い、オブジェクトによって変更する必要のないプロパティに使用する
staticメソッドの呼び出し方
{クラス}::{静的メソッド}
ex:Person::bye()
クラスの継承
継承クラスで上書きされた関数やstaticメソッド、プロパティが優先される。
protected
:自クラスと継承クラスでアクセス可能
継承の仕方
class Japanese extends Person
final
:子クラスでメソッドを上書き不可能にする
abstract
:子クラスでメソッドを必ず上書きする
abstractを使う理由
static
親クラスで使う場合、継承先(子クラス)を参照する
self
:親クラスで使う場合、継承先ではなく、親クラスを参照する
子クラスで使う場合はstatic
とself
の挙動に違いはない。
parent
:継承元のメソッドやプロパティを参照する