オブジェクト指向PHP

こんにちは。 オブジェクトとしてプリミティブ(文字列、整数、浮動小数点数、配列)を操作するために、PHPの新しいオープンソースライブラリのアルファ版をアルファコミュニティに提示したいと思います。



簡単な説明-短い説明、Googleコードへのリンク、目標と計画の説明。



greedykidに多大な感謝をしなければなりませ。greedykidは、膨大な数のバグを発見し 、ユニットテストの80%をカバーしてくれました。 あなたが図書館が好きなら、それはカルマに値するものだと思います。



大声で考えます



phpが大好きな私は、設計に対する彼の開発者の軽視や失礼な態度を理解することはありませんでした。

ある場所では、下位互換性があり、ある種のコーディング標準を導入しようとしないことを理解できないようにします(たとえば、名前空間に\ array \ *および\ string \ *関数を入力しない理由は、古いものを非推奨として宣言する時間をかけて?)

無視のもう1つの例はArray_Objectクラスです。このクラスは、その貧弱さに単純に印象的です。 さて、あなたがすでにやろうとしているのなら、真剣かつ優雅にやってみませんか?



目標



このタイプのほとんどのラッパーとは異なり、このラッパーの目標は機能のデモンストレーションではなく、このアプローチがもたらすすべての利点(完全なTypeHinting、継承など)を使用して、作業プロジェクトで完全に使用することです。

また、目標は、関数の恐ろしい名前とメソッドの不整合を最大化することでした。 メソッドの引数の命名スタイルと順序を導入する試みがありました。

私の意見では、いくつかのメソッドははるかに使いやすくなっています(より明白です)。ほとんどのメソッドは組み込み関数よりも主観的に使いやすいです。

粗雑なphp-coreに恵みを加えたかっただけです。 そして基本的に、言語が障害にならなかった場合、それは完全に機能しました



ニュアンス



これらのライブラリのほとんどとは異なり、このライブラリはそれ自体で問題なく動作します。 つまり、たとえば、Mapは1つの値として、新しい文字列( "abc")、つまり "abc"と見なします。 つまり、$ map ["key"]と$ map [new String( "key")]は同等です。

これらはオブジェクトであるため、すべての値は参照によって渡されます。 すべての結果で。

一部の場所では、PHPの制限に遭遇しました。 たとえば、foreach($ map as $ key => $ value)を使用する場合、$ keyはオブジェクトとしてではなくプリミティブ値として返されるため、美しい構文に劣らない代替を使用することをお勧めします:while($ map-> each($ key、$ value) ){}または$ map-> loop(関数($キー、$値){})。呼び出しチェーンを離れることなく使用できます。



計画と希望



多くの人がこのライブラリを気に入ってくれることを願っています。 誰かが単なるユーザーになりたい、誰かがユーザー+アクティブなバグレポーターになりたい。

そして、もちろん、プロジェクトの開発に参加したい人がいることを願っています。 多かれ少なかれ安定したバージョンの迅速なリリースを望みます

その後、このlibのインターフェースに対応するCの拡張を見たいと思います。 一般的に優れています。 小さなプロジェクトでは、PHPコードを使用できます。プロジェクトが大きくなり大きくなれば、この拡張機能をインストールするだけで十分であり、このラッパーによるパフォーマンスの低下はありません。 私見、これは良いプッシュになります。

そして、ご存知のように、おそらく8年後、宇宙の歴史における最初の惑星間チェス会議がヴァスキキで開催されるでしょう!



コード例



<?

$map

-> clear (function ( $key , $val ) {

// ,

return ! $key -> equals ( $val );

})

->
join ( ' ' ) // String

-> replace ( ',' , '' )

->
pregReplace ( '/([0-9]+)/' , function ( $m ) {

return
"! $m [ 0 ] !" ; // Some string with number(eg !12345!), is here

})

->
changeCase ( Str :: TITLE , Str :: UP_FORCED )

->
insert ( '[]' , 5 )

->
length () // Number

-> multiply ( 4 )

->
add ( 6 , 9 , new Number ( 15 ))

->
divided ( 5 )

->
sum ( Number :: EVEN )

->
dump () // (Number) 1062.51

-> root ( 4 )

->
round ( 3 ) // Just 3 symbols after dot

-> dump () // (Number) 5.709

-> round ( Number :: UP ) // round to up (ceil)

-> hex ( '15abbf' )

->
toString () // String ('1420223')

-> hash () // 'md5' as default

-> dump (); // (String) '0d1b1558224c8f3b125cd905c378c9f7'



// «KurrencyKonverter.php»

$uah = new KurrencyKonverter ( 500 ); // KurrencyKonverter extends Number

// , 500

echo $uah

-> copy ()

->
convert ( 'Currency.Ua.Sell' , 'UAH' , 'USD' )

->
toString ( 2 ); // 63,02

// , 500 , -

echo $uah

-> convert ( 'Currency.Ua.Sell' , 'UAH' , 'RUR' )

->
convert ( 'Currency.Ru' , 'RUR' , 'USD' )

->
toString ( 2 ); // 44,77







詳細については、Googleコードをご覧ください。 例を見ることをお勧めします-そこには多くの興味深いものがあります)



警告



「なぜ車輪を再発明するのか」、「OOP for OOP」、「KG / AM」と叫ぶことを望んでいる、予測可能で落胆した人々が前もって送られました。

アセンブラーを学ぶために送られた一致最適化について叫ぶ愛好家

私は絶賛と建設的な批判を受け入れます:)



参照資料



php.ruの最初のアルファバージョンの説明

Googleコードプロジェクト





注釈



バグレポートとオファーの両方が受け入れられます。 php.ruフォーラムで議論しながらこのトピックを読むことをお勧めします-ライブラリの機能について多くの興味深いことがわかります。 興味深いアプリケーションがすぐに実現することがわかります。

コードの作成を支援したいという要望は大歓迎です)

当然ながら、バグは可能です。 しかし、彼女とアルファ版)

ライセンス-LGPL



追伸 編集可能な記事の過程で、新しい考えを追加します



All Articles