初めに
自分が業務内でlaravelを使っていた際にphpのオブジェクトと連想配列の使い方や違いが良く分からなかったので自分が悩んだところと調べて分かったことをまとめました。
自己紹介
・専門学校を卒業後新卒で自社開発のweb系企業に入社
・働き始めて2か月ほど
実行環境
・Windows10
・php8.2.0
・xampp上で実行
つまずいたこと
//連想配列を作成
$array = array (
"taxi" => "タクシー",
"police_car" => "パトカー",
"ambulance" => "救急車",
);
//echoで呼び出し
echo "taxiは日本語で" . $array->taxi . "です<br>";
echo "police carは日本語で" . $array->police_car . "です<br>";
echo "ambulanceは日本語で" . $array->ambulance . "です";
//出力結果(エラー)
Warning: Attempt to read property "taxi" on array in C:\xampp\htdocs\studys\php\test\error.php on line 10
Warning: Attempt to read property "police_car" on array in C:\xampp\htdocs\studys\php\test\error.php on line 11
Warning: Attempt to read property "ambulance" on array in C:\xampp\htdocs\studys\php\test\error.php on line 12
連想配列を呼び出そうとした際にエラーになりました。エラーの内容としては配列の中身を読み取ろうとして失敗したという事です。原因は呼び出す際に\$array["taxi"]ではなく$array->taxiと記述していたため配列からではなくオブジェクトから値を取り出そうとしてしまいエラーになりました。。
正しい記述例
//連想配列を作成
$array = array (
"taxi" => "タクシー",
"police_car" => "パトカー",
"ambulance" => "救急車",
);
//echoで呼び出し
echo "taxiは日本語で" . $array["taxi"] . "です<br>";
echo "police carは日本語で" . $array["police_car"] . "です<br>";
echo "ambulanceは日本語で" . $array["ambulance"] . "です";
//出力結果
appleは日本語でタクシーです
lemonは日本語でパトカーです
orangeは日本語で救急車です
連想配列では
変数名 = array (
キー名=>キー名の中身
)
と書くことで配列を作成することができます。
中の要素を呼び出す際は変数名["キー名"]で呼び出します。
echo $array["taxi"] //タクシーという文字列が出力される
キー名は呼び出す際の識別子のようなものです。上の例では[]の中を"ambulance"に変えると救急車という文字列が呼ばれます。
補足
説明の中で出てきたオブジェクトの例も載せておきます。
//オブジェクトを作成
class Obj{
public $name = "タクシー";
public $english_name = "taxi" ;
}
//インスタンスを作成
$object = new Obj;
var_dump($object);
//var_dumpで呼び出すとobject(Obj)#1 (2) { ["name"]=> string(12) "タクシー" ["english_name"]=> string(4) "taxi" }の値が返ってくる
//echoで呼び出し
echo "車の名前は" . $object->name . "です<br>";
echo "英語名は" . $object->english_name . "です";
//出力結果
車の名前はタクシーです
英語名はpolice carです
上のコードから部分的に抜き出すとオブジェクトでは
class Obj{
public $name = "タクシー";
public $english_name = "taxi" ;
}
//Objはクラス名
//$nameと$english_nameは変数名
でクラスと中の変数を作成して
$object = new Obj; //Objはクラス名
インスタンス化をしてから
$object->name
と書くことで呼び出すことができます。
まとめ
今回はオブジェクトと連想配列でつまずいたところと調べていく中で知った書き方などをまとめていきました。まだまだ基礎的な部分がしっかりできていないので勉強していきたいと思います。また説明途中に出てきたインスタンス化の詳しい説明もしっかり理解出来たら記事として上げていきたいと思います
参考文献・記事
https://qiita.com/shin_moto/items/7dc3cf0a64738f7a4d6b
https://coinbaby8.com/different-between-object-and-array.html