Archives by date

You are browsing the site archives by date.

PHPで使用可能なキャストまとめ。

基本を大切に。

キャスト 詳細
(int)、(integer) 整数型にキャスト
(float)、(double)、(real) フロート型にキャスト
(bool)、(boolean) ブーリアン型にキャスト
(string) 文字列型にキャスト
(array) 配列型にキャスト
(object) オブジェクト型にキャスト
(binary) バイナリ文字列型にキャスト
(unset) null型にキャスト

PHPは暗黙の型変換があるからあまり変数の型を意識することがないけど、知ってるとやっぱり便利。

PHPのprintf()とsprintf()の違い。

よーーーーやく解ったのでメモ。

■printf()

フォーマットした文字列を標準出力(STD_OUT)する。
※文字列のバイト数を返り値として返却するため、結果を変数に格納することは出来ない。

■sprintf()

フォーマットした文字列を返却する。
※当然変数などを受け皿に格納することが可能。

 

似たような関数にvprintf()とvsprintf()があるがこれも引数の違い除き上記と同様の動作をする。

■vprintf()

配列形式の情報を引数で受け取り、フォーマットした文字列を標準出力(STD_OUT)する。
※文字列のバイト数を返り値として返却する。

■vsprintf()

配列形式の情報を引数で受け取り、フォーマットした文字列を返却する。

 

超スッキリ。

正規表現で文字列を抜き出したい時の自分用メモ。

みんな大好きpreg_match()!!
※PHPです。

$str = 'abcdefghijklmnopqrstuvwxyz';
$regex = '/abc(.*?)jkl/';
preg_match($regex, $str, $match);

var_dump($match);
↓
array(2) { [0]=> string(12) "abcdefghijkl" [1]=> string(6) "defghi" }

抜き出したい部分を「(.*?)」で置き換えるのが肝。
ちょっとずつ正規表現に対しても抵抗なくなってきたかな。

PHPで「self::」と「$this」の違いを理解する。

これを完全に理解しきるには一筋縄じゃいかない模様。
とりあえず自分用にザックリめも。

まず、標題の件に関して。

■self::
自クラスのプロパティ、及びメソッドへの静的アクセス。

■$this
自分自身のオブジェクトを指す。

 

次に、そもそも論として。

 

・クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static なプロパティは、インスタンス化されたクラスオブジェクトから アクセスすることはできません (static なメソッドにはアクセスできます)。

・static メソッドは、オブジェクトのインスタンスを生成せずに コールすることができます。疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできません。

・static プロパティは、矢印演算子 -> によりオブジェクトからアクセス することはできません。

・static でないメソッドを静的にコールすると、E_STRICT レベルの 警告が発生します。

公式リファレンスより引用

 

上記の説明で大体理解は出来た。
一応セーフなパターンとアウトなパターンを実験してみる。

<?php
class selfAndThis {

	public $param1 = 'hoge';
	
	public static $param2 = 'piyo';	

}

例えば上記のようなクラスがあったとしたら。

// 下記はセーフ
$obj = new selfAndThis();
$res1 = $obj->param1;
$res2 = selfAndThis::$param2;

// 下記はアウト
$obj = new selfAndThis();
$res1 = $obj->param2;
$res2 = selfAndThis::$param1;

※$res1 : staticプロパティにはインスタンス化したオブジェクトからはアクセスできないためエラーとなる。(staticプロパティはアロー演算子「->」によるアクセスが出来ない。)
※$res2 : staticでないプロパティはインスタンス生成無しでアクセスできないためエラーとなる。

次にメソッド編。ようやくself::のお出まし。
上記のクラスに一つのメソッドを追加して実験。

<?php
class selfAndThis {
	
	public $param1 = 'hoge';
	
	public static $param2 = 'piyo';
	
	public static function test() {
		return self::$param2;
	}
}

staticなメソッドに関してはインスタンス化の有無を問わず呼び出すことが可能。
よって以下の呼び出し方は共にセーフ。

$obj = new selfAndThis();
$res1 = $obj->test();
$res2 = selfAndThis::test();

var_dump($res1, $res2);
↓
string(4) "piyo" string(4) "piyo"

そして以下アウトなパターン。
staticメソッド内で疑似変数$thisを使っているとアウト。

// Fatalエラー
public static function test() {
	return $this->param2;
}

他にもパターンをあげていくとキリがないが、スコープ定義演算子やstaticキーワードに関しては今後も知識を深めていく必要がありそう。