はじめに
Laravelの仕組みを調べているときに調べたマジックメソッドの機能について、自分の備忘録を兼ねてここにまとめました。
この投稿について疑問や指摘があれば、ぜひコメントお願いします。
#本題
property_exists メソッド
PHPマニュアル(https://www.php.net/manual/ja/function.property-exists.php)
機能 オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる。
説明 property_exists ( mixed $class , string $property ) : bool
パラメータ class:確認するクラス、もしくはクラスのオブジェクトを指定します。 property:プロパティ名を指定します。
試し書き
//基本型
class Pikotaro
{
public $pen;
protected $pineapple;
private $apple;
}
var_dump(property_exists('Pikotaro', 'pen')); //bool(true)
var_dump(property_exists(new Pikotaro, 'pineapple')); //bool(true)
var_dump(property_exists(new Pikotaro, 'apple')); //bool(true)
var_dump(property_exists('Pikotaro', 'applepen')); //bool(false)
<?php
//同じ名前空間で使うとき
namespace Kosakadaimao;
class Pikotaro
{
public $pen;
protected $pineapple;
private $apple;
}
var_dump(property_exists('\\Kosakadaimao\\Pikotaro', 'pen')); //bool(true)
var_dump(property_exists(new Pikotaro, 'pineapple')); //bool(true)
//異なる名前空間で使うとき
namespace Kosaka;
use Kosakadaimao;
var_dump(property_exists('\\Kosakadaimao\\Pikotaro', 'pen')); //bool(true)
var_dump(property_exists(new Kosakadaimao\Pikotaro, 'apple')); //bool(true)
?>
追記)名前空間の特定クラスのプロパティーを調べたい場合は上記のようにすればできます。
end メソッド
PHPマニュアル(https://www.php.net/manual/ja/function.end.php)
機能 配列の内部ポインタを最終要素にセットする。
説明 end ( array &$array ) : mixed
パラメータ array:配列。この配列は参照渡しとなります。関数内で配列の中身を変更するからです。 つまり、ここには配列そのものを渡さなければならず、 配列を返す関数を指定することはできません。 参照渡しできるのは、実際の変数だけだからです。
試し書き
//基本型
$kosaka = ['Pikotaro', 'Kosakadaimao', 'Kazuhito'];
var_dump($kosaka); //array(3) { [0]=> string(8) "Pikotaro" [1]=> string(12) "Kosakadaimao" [2]=> string(8) "Kazuhito" }
echo end($kosaka); //Kazuhiro
//User Contributed Notes から
$kosaka[2] = 'Pikotaro';
$kosaka[1] = 'Kosakadaimao';
$kosaka[0] = 'Kazuhito';
var_dump($kosaka); //array(3) { [2]=> string(8) "Pikotaro" [1]=> string(12) "Kosakadaimao" [0]=> string(8) "Kazuhito" }
echo end($kosaka); //Kazuhito
var_dump()の結果からわかりますが、連想配列のキーを数字にしても、デフォルトのキーのように昇順で並んでくれないようです。
$kosaka = ['Pikotaro', 'Kosakadaimao', 'Kazuhito'];
$kosaka[2] = 'Pikotaro';
$kosaka[1] = 'Kosakadaimao';
$kosaka[0] = 'Kazuhito';
var_dump($kosaka); //array(3) { [0]=> string(8) "Kazuhito" [1]=> string(12) "Kosakadaimao" [2]=> string(8) "Pikotaro" }
echo end($kosaka); //Pikotaro
しかし、デフォルトのキーの値を上書きする形であれば、デフォルトのキーの順番通りに並ぶようです。
#終わりに
もっといろんなマジックメソッドの機能を上げようと思ったのですが、疲れたのでここで終わります。
いつかまたこの続きをやりたいなと思います。