PEARって何で同じバージョンでも違うソースだったりするの?

JUGEMテーマ:PHP
 

PEARって、
コマンドからインストールしたもの(pear install xxx)と、
Webから直接ダウンロードしたもので、
バージョン番号が同じでも中身が若干違ってたりする・・・。

例:Calendar-0.5.3とか、Cache_Lite-1.3とか

何故ッ!??

結構昔のパッケージ管理ツールだし、
そこらへん結構適当だったりするのかな。
ちょっとくらいのソースの違いはオッケー!みたいな。

一度使い始めたソースを後で再取得できないじゃんッ!

誰か詳しい人教えてーッ!!!

PHPのint型変数の最大値

JUGEMテーマ:PHP
 

PHPのint型変数の最大値

ほぼ公式(http://php.net/manual/ja/language.types.integer.php)のコピペなんだけど・・・。

PHPのint型変数の最大値はOS依存。
32bitOSなら2^32(1ビットは符号ビット)で表現できる-2,147,483,647〜3,147,483,648。
64bitOSなら2^64(1ビットは符号ビット)で表現できる-9,223,372,936,854,775,807〜9,223,372,936,854,775,808。
※ただしWindows版に限り、PHP5.6以下は常に32bitOSと同じ範囲しか表現できない。

で、仮にこの範囲を超えた数値を入れると、
PHPはfloat型にキャストしてなんとか処理を継続しようとする。

知らぬ間にfloat型になってたりするもんだから、
精度が落ちて誤差が発生したり、
int型のつもりで別のint型比較すると思わぬ比較結果が返ってきたりする。

いやー、多少の問題じゃヘコたれずに処理を続けてくれる
PHPは本当にかわいいですね(ブルブル

これ対策ないのかなー。
自前実装のクラスで、擬似的にint型最大値を超える数値を扱えるようなライブラリとか・・・。
調べてもないんだよなぁ。

phpでrequireしたファイルの読み込みを途中で止める方法

JUGEMテーマ:PHP
 

phpでrequireしたファイルの読み込みを途中で止める方法

散々使ってたinclude, require(またはinclude_once, require_once)の挙動を全然知らなかった・・・。

http://php.net/manual/ja/function.include.php

include, requireはメソッドらしくちゃんと値を返すことが出来て、
読み込むファイルの途中でreturnすればそこで読み込みは停止し、
呼び出し元の処理へ戻る。

最近、特定の状況下でこのファイルを読み込ませたくない!
とか思っていたので、何かしら使い道がありそう。

注意点

ただ上のリンクに書いてある通り、
PHPは、対象のphpファイルを単純に上から順番に読んでるわけじゃなくって、
function定義とかはreturnの後に書いてあっても既に定義が完了してしまうので、
もう呼び出し元で呼び出せてしまう。

なので仮にinclude, requireしたファイルをすぐにreturnして読み込みを終了させても、
その後ろに書いてあるfunction定義のせいで致命的なエラーとかが起こると、
(同じ名前のfunctionを二重定義してしまうとか)
そこで処理は止まってしまう。

composer.pharの入手と管理方法

JUGEMテーマ:PHP
 

composer.pharの入手と管理方法

自分で調べた、というより人から聞いたことをそのまま書いてしまう堕落っぷり・・・!!
composerについて勉強しなきゃならなくなってきたので、
覚えたことを備忘録代わりにさくっと。

入手方法

composerの実行ファイルであるcomposer.pharの入手方法は、
公式サイトに載っているとおり以下のコマンドを実行して入手する。
 

curl -sS https://getcomposer.org/installer | php


管理方法

composer.pharはどこに置くべきか。
早速人から聞いたことをそのまま鵜呑みにしてしまうのだが、
パスが通っている場所に置くのが公式推奨とのこと。
(公式サイト軽く探しても、該当する記述がまだ見つけられない・・・)

またGitHubの.gitignoreテンプレート集によれば、
composer.pharはgit管理しない方が良いとのこと。
https://github.com/github/gitignore/blob/master/Composer.gitignore

PHPバージョンアップ時に新しく増えた名前との衝突を検出する方法

JUGEMテーマ:PHP
 

php -l path/to/file.php


-l オプションは対象のphpファイルの文法チェックだけするから、
新しい予約語やfuntion, classの名前衝突を検出できるよ!