1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自分が調べたPHPのマジックメソッドの機能についてまとめてみた

Last updated at Posted at 2019-12-22

はじめに 

Laravelの仕組みを調べているときに調べたマジックメソッドの機能について、自分の備忘録を兼ねてここにまとめました。
この投稿について疑問や指摘があれば、ぜひコメントお願いします。

#本題
property_exists メソッド

PHPマニュアル(https://www.php.net/manual/ja/function.property-exists.php)

機能 オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる。
説明 property_exists ( mixed $class , string $property ) : bool
パラメータ class:確認するクラス、もしくはクラスのオブジェクトを指定します。 property:プロパティ名を指定します。

試し書き

PropertyExists.php
//基本型
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)
PulsPropertyExists.php
<?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:配列。この配列は参照渡しとなります。関数内で配列の中身を変更するからです。 つまり、ここには配列そのものを渡さなければならず、 配列を返す関数を指定することはできません。 参照渡しできるのは、実際の変数だけだからです。

試し書き

End.php
//基本型
$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
PlusEnd.php
//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()の結果からわかりますが、連想配列のキーを数字にしても、デフォルトのキーのように昇順で並んでくれないようです。

PlusPlusEnd.php
$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

しかし、デフォルトのキーの値を上書きする形であれば、デフォルトのキーの順番通りに並ぶようです。

#終わりに
もっといろんなマジックメソッドの機能を上げようと思ったのですが、疲れたのでここで終わります。
いつかまたこの続きをやりたいなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?