vim-quickrunがこける

あるときからvim-quickrunを実行するとこけるように…

<環境>
Windows XP
Vim 7.3 (Kaoriya版)
NeoBundleでvim-quickrunは入れた

なにやらpython部分でこけてるらしいので

.vim\bundle\vim-quickrun\autoload\quickrun\runner
内の
python.vim
を全部コメントアウトしてみました(強引すぎ..)

動作するようになりました。
取り急ぎ、これで応急処置。

cygwinでtelnetをインストール

cygwinでtelnetコマンド打つと、入ってない…
ためしたversionは、1.7.17です

最初からは入ってないようでインストール

apt-cyg install telnet
だと反応がない..

apt-cyg install inetutils
に入ってました

ちなみにWindows7でも
コントロール パネル\プログラム\プログラムと機能
Windowsの機能の有効化または無効化
で、TELNETクライアントにチェックを入れてインストールすれば
コマンドプロンプトでも使えます

[PHP]オーバーライドでの呼び出したメソッドはだれのか?

PHPでのオーバーライドでの親子メソッド呼び出しで
混乱したので整理。

まず、普通のoverride


class A {
    public function who() {
        echo 'Aです';
    }
    public function test() {
        $this->who();
    }
}

class B extends A {
    public function who() {
        echo 'Bです';
    }
    public function test() {
        $this->who();
    }
}

$cls = new B();
$cls->test();

// [実行結果]
// Bです

まだ、Aのメソッドは一つも呼び出されていません。

test()を親クラスのtest()に変えてみると


class A {
    public function who() {
        echo 'Aです';
    }
    public function test() {
        $this->who();
    }
}

class B extends A {
    public function who() {
        echo 'Bです';
    }
    public function test() {
        parent::test();
    }
}

$cls = new B();
$cls->who();

// [実行結果]
// Bです

これもBのwho()が呼び出されます

クラスBから、Aのwho()が呼びたいなら


class A {
    public function who() {
        echo 'Aです';
    }
    public function test() {
        $this->who();
    }
}

class B extends A {
    public function who() {
        parent::who();
        //echo 'Bです';
    }
    public function test() {
        parent::test();
    }
}

$cls = new B();
$cls->who();

// [実行結果]
// Aです

これで、親クラスのwhoメソッドが呼ばれます

そして、staticの場合


class A {
    public static function who() {
        echo 'Aです';
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo 'Bです';
    }
    public static function test() {
        parent::test();
    }
}

// [実行結果]
// Aです

BからAのtestを呼ぶ、self::who()はAのwho()となります

overrideしたBのwho()としたいなら
遅延静的束縛 (Late Static Bindings)ってのですね
(PHP5.3以降じゃないと効かないです)


class A {
    public static function who() {
        echo 'Aです';
    }
    public static function test() {
        static::who();
    }
}

class B extends A {
    public static function who() {
        echo 'Bです';
    }
    public static function test() {
        parent::test();
    }
}

// [実行結果]
// Bです

self::でなくてstatic::にしてやると
overrideが効きます

遅延静的束縛を忘れかけてました..

centosでxhprofをインストールしてみる

centosでxhprofをインストールしてみます

<環境>
Centos 6.3
Apache 2.2
PHP 5.3

pecl install xhprof
だとエラーがでたので
pecl install xhprof-0.9.3

で、すんなりはいりました

php.iniに
extension=xhprof.so
を追記

Apache読み込み直し
/etc/init.d/httpd reload

phpinfoを確認、xhprofが増えていれば成功