php

static property

php

仕事の時に見てたコードで、おや?と思ったものがあったので調べた。 クラス継承時に、親の持っている static property は子から参照しても同じ値が入っています。(static_property.php)しかし、子クラスで同名の static property を宣言すると、親と子で別…

メソッドの呼び出し方

PHPでは、static宣言なしでもメソッドのstatic呼び出しができてしまう。 で、どっちが速いの?という話。 メモリの使用量も比べてみたかったけど、速さのみ。

ビット演算子の恐怖

php

PHPは暗黙の型変換をしてくれます。 余計なお世話なことが多いですが、適当プログラマには便利な場面もあります。さて、ビット演算。フラグを複数設定したい場合なんかにたまに使いますが、こいつがまた余計なことをしてくれます。 なんと、文字列がビット演…

ReflectionClassでメソッドを動的に呼ぶ&ベンチマーク

php

以前に変数を使って、クラスに対して動的にプロパティを追加してみた。 Objectに動的にプロパティを追加する - うっかりプログラミング日誌今度は動的にメソッドを呼んでみる。*1 $method(); //=> 2 簡単! ReflectionClassを使う とはいえ、この方法だと引…

array_mapでstaticメソッドを呼び出す時に、selfが使えない

php

ここのところPHPばかりやっているので、小ネタ。 PHP 5.2.8 for Windows での話。array_mapで関数名を指定する時、通常は文字列で指定する。

create_functionはクロージャにはなれない

php

Rubyだとこんな感じで書ける def counter i = 0 lambda{|n| i += n} end count = counter puts count.call(1) #=> 1 puts count.call(2) #=> 3 puts count.call(3) #=> 6 PHPの場合も同じ結果を期待したけど、クロージャとしては動いてくれないらしい。

PHPのオーバーロードで動的にメソッドやメンバーを作成する

php

宣言していないメンバーやメソッドにアクセスしようとすると、マジックメソッドが呼ばれる。 そのマジックメソッドの中でごにょごにょしてあげれば良い。 それを使うと、メソッドチェインみたいなこともできる。 values[$name]) === false) { $this->values[…

Objectに動的にプロパティを追加する

php

object 生成後に、宣言とか関数とか使わずにプロパティを追加できるらしい。 by PHP 5.2.6 (Mac OSX) foo = 'bar'; // add property print_r(get_class_vars('Test')); print_r(get_object_vars($test)); // 実行結果 Array ( [a] => default ) Array ( [a] …

public なメソッドを private でオーバーライドした場合

Java だと確か、アクセス制限を弱める方向でオーバーライドできた覚えがある。 PHP と Ruby で同じことを試す機会があったのでメモ。 PHP の場合 Error になる。public なメソッドは public でないといけないらしい。 Java と似た方式。

FizzBuzzというかナベアツ

せっかくRubyやりだしたので FizzBuzzしてみる。 3の倍数でFizz、5の倍数でBuzz、両方ならFizzBuzzを出力。 (1..100).each{|n| p n%3==0||n%5==0?n%3==0?n%5==0?'FizzBuzz':'Buzz':'Fizz':n} ついでにNabeatsuもしてみる 3の倍数と3がつくときにアホになり(2…