忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/10/17 14:45 |
PHP5.5.3 PHPでオブジェクトの強い型付け
前回SplTypeを使って厳密なSplInt型を作りました。
が、用意されているのはint、stringといったスカラー型だけでした。

自作のクラスに対応するためにSplTypeが用意されています。
SplTypeはabstractなクラスです。
何故インターフェイスじゃないんだ。
<?php
	class HOGE extends SplType{}

	$hoge = new HOGE();
	$hoge = 1; // Uncaught exception 'UnexpectedValueException'
あれ、これ全クラスをextends SplTypeってしとけば強い型付け言語PHPの誕生じゃね?
PHPは型付けが~とか言ってる人はいっぱいいるけど、これを紹介してる人がただの一人もいないってのはどういうことですかね。

せっかくなので、runkitで全クラスに強制的にSplTypeを継承させてしまいましょう。
<?php
	class HOGE{}
	
	$classes = get_declared_classes();
	class SplTypeTmp extends SplType{}
	$tmp = error_reporting(0);
	foreach(get_declared_classes() as $key=>$val){
		if(!get_parent_class($val)){
			runkit_class_adopt($val, 'SplTypeTmp');
		}
	}
	error_reporting($tmp);
	
	$x = new HOGE();
	$x = 1; // 普通に入った
あれ?
調べてみたらrunkit_class_adoptは一見親クラスを付け替えているように見えますが、実際は本当に変更しているわけではなくエミュレーション的なことをしているみたいです。
自作クラスでも一部情報が飛んでしまい、SplTypeのような特殊なクラスではその特殊性が失われます。
ということで全自動強い型付け言語PHPの夢は破れてしまいました。
型付けとかは開発時にしか必要のない機能なので、php.iniあたりでSplType強制を設定できるようになってくれれば、とても便利だと思うのですがどうでしょう >開発者

SplTypeを使いこなせば、開発に非常に強力な武器となってくれるでしょう。
あと強い型付け言語使いから大きな顔をされることもなくなるでしょう。
PR


2014/01/13 22:06 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.5.3 エラトステネスの篩で素数を求める | HOME | 買ったものリスト 2014/01/12>>
忍者ブログ[PR]