プログラミングいちねんせい

プログラミング歴ゼロの初心者がもがくサイトです

初学者を悩ませるPHPの演算子と仲良くなろう

f:id:javacurry:20210609204939j:plain

演算子について

プログラムのなかに頻出する->, ::, =>と仲良くできていますか?私はなんとなくわかったような感覚で接していましたが、PHPMySQL を勉強していくなかで出てきたPDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONの存在が奇妙すぎて調べずにはいられなくなりました。今回は私と同じように、なんとなくわかったような感覚でいる初学者に向けて奇妙な演算子と仲良くなるための情報を一緒に紐解いていきます。読み終わる頃には、なんとなくの霧が晴れて他人のコードのなかで遭遇しても仲良くできるはずです。お菓子でも食べながらのんびりと読んでみてください。では、いきましょう。

アロー演算子->

インスタンスのメソッドやプロパティにアクセスするときに使います。

function getDb($pdo)
{
    $stmt = $pdo->query("select * from mydb");
    return $stmt;
}
function getDb($pdo)

getDb という名前の関数です。仮引数として$pdoとしています。$pdoはデータベースに接続するための方式です。ここでは$pdoにはデータベースに関する情報が詰まっていると考えといてください。

$stmt = $pdo->query("select * from mydb");

はい、ここで出てきました->です。これはインスタンスのメソッドやプロパティにアクセスするときに使います。ここでは$pdoのなかにあるqueryメソッドにアクセスしてます。queryメソッドはデータベースを表示するときに使うのでselect * from mydbと書いて「データベースmydbのなかを全部表示して」と命令してます。その情報を$stmtという変数に代入しました。ただ、それだけです。

return $stmt;

$stmtを return しています。

というわけで

->はメソッドやプロパティにアクセスするときに使うという演算子でした。さきほどの $stmtPHP のページで foreach を使って一覧表示させます。そのときも->を使うので頻繁に出てきますね。

スコープ定義演算子::

**クラスのメソッドやプロパティにアクセスするときに使います。

PDO::ATTR_ERRMODE
PDO::ATTR_DEFAULT_FETCH_MODE
PDO::ATTR_EMULATE_PREPARES

->インスタンスのメソッドやプロパティにアクセスするときに使いました。::はクラスに使います。クラス?インスタンス

クラスとインスタンスの説明

クラスは設計図と表現されることが多いです。インスタンスはクラスが具現化されたもので「さあ、あの設計図を使うぞ!」というときにインスタンスとして登場します。インスタンス化された瞬間にメモリが確保されるので、インスタンス化させるために new を繰り返すとメモリをどんどん消費しちゃうわけです。怖いですね。その設計図となる、クラスのメソッドやプロパティにアクセスする方法がスコープ演算子である::です。インスタンス化しなくても使えるわけですね。便利。

ダブルアロー演算子=>

連想配列のキーに値を紐付けるときに使います。人によっては代入するとも表現します。

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => false,

実はスコープ演算子のはなしのなかで出てきたコードには右辺もあったんです。今回、調べることになったきっかけがこのコードです。こんな書き方には初めて遭遇したので気持ち悪かったです。ここまで読んだみなさんなら簡単に理解できると思います。これって、ただPDOクラスのATTR_ERRMODEプロパティにPDOクラスのERRMODE_EXCEPTIONプロパティを紐付けてただけなんですね。連想配列なので Key がPDO::ATTR_ERRMODEValuePDO::ERRMODE_EXCEPTIONと指定しただけのはなしでした。ATTRは Attribute で属性、EXCEPTION は例外という意味です。PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONの1行で SQL のエラーが起こった場合に人間にとって読みやすいエラーを投げてくれます。

まとめ

初学者には呪文のようにしか見えませんが、1つずつ紐解けばわかりやすいですね。私自身の備忘録としての役割にも期待して書きました。