PHPおよびOOPマジック

David: Magic OOP
うん、これらの人、今私はあなたにOOPの魔法を紹介します。

序文の代わりに。 言語の著者について



開発者が吸った草についてもっと正確に言えば、関数をどのように呼び出すことができますか? さて、文字列を操作するための関数を例にとってみましょう:

ご覧のとおり、非常に悲観的であり、配列を取得した場合、ある場所では関数が結果を返し、別の場所では参照によって機能します... brr ...

言語自体にも標準がないため、この言語で作業する際に多少の不快感があります。 はい、他の人は目を細めています...

PHPはOOP言語ではありません



この話をよく聞きます。 私はそれを書き直すことにしました:)

決定し、書き直した- Rubyで 文字列と配列のラッパーとなるいくつかのクラス。 これらのクラスには頻繁に使用される関数のみが含まれ(私の謙虚な意見では)、残りはリフレクションに割り当てられました。

配列-oArray



このクラスには、次の標準関数が含まれます。



また、少し便利なギャグ:


array_ *という形式のすべての関数について、このプレフィックスを削除しました(結局、配列で何が機能するかは既にわかっています)。残りの関数は__callメソッドとリフレクションの良心にあります。

文字列-oString



このクラスには、次の標準関数が含まれます。



また、少し便利なギャグ:


str_ *およびstr *の形式のすべての関数について、このプレフィックスは削除されました。

また、URLを操作するための関数を割り当て、それらを別のクラス(oUrl)に詰め込みました。


スライド


次に、この作成の使用例を示します。
oArray ( ) //空の配列を作成
-> range ( 0、100、10 ) //範囲のラッパー
-> size ( ) // sizeofのラッパー
;


どうですか? また、脳に食べ物を与えます。
<?php

//要素の配列を作成します
// => array( 'module'、 'controller'、 'action')
oArray ( 'module' 、 'controller' 、 'action' )
// array_combineのラッパー
// => array( 'module' => 'default'、 'controller' => 'index'、 'action' => 'index')
-> 結合 ( oArray ( 'default' 、 'index' 、 'index' ) )
// http_build_queryのラッパーはoUrlを返します
// =>モジュール=デフォルト&コントローラ=インデックス&アクション=インデックス
-> to_url ( )
//文字列を先頭に追加します
// => http://domain.com/?module=default&controller=index&action=index
-> 挿入 ( 'http://domain.com/?' )
// parse_urlのラッパーはoArrayを返します
-> 解析 ( )
//配列['host']を返します
// => domain.com
-> ホスト
;


そしてまた:
oString ( "それは私のやり方です" )
// str_replace =>「あなたのやり方です」
-> 置換 ( 'my' 、 'your' )
// substr => "それはあなたです"
-> sub ( 0、8 )
// str_pad => "それはあなたです..."
-> パッド ( 11 、 '。' )
// str_repeat => "それはあなたです...それはあなたです..."
-> 繰り返し ( 2 )
// oArray => array( 'It's you'、 'It's you'、 '')を取得します
-> 爆発 ( '...' )
//空の要素を削除します
-> クリア ( )
// array_merge => array( 'It's you'、 'It's you'、 'Yes'、 'No'、 'Maybe')
-> merge ( array ( 'Yes' 、 'No' ) 、 array ( 'Maybe' ) )
//破裂=>​​それはあなたです;それはあなたです;はい;いいえ;たぶん
->内 破 ( ';' )
// return It's you; It's you; Yes; No;たぶん
-> get ( )
;


オブジェクト-oObject


通常のクラスでさえ、オブジェクトのプロパティにトリッキーなゲッター/セッターを追加することで改善できます(RoRで見張っています):

クラス MyClass は Object_Object {を 拡張します
//これは本当に保護されたプロパティです
protected $ _protected ;

//これらのフィールドには、ゲッター/セッターを定義できます
保護された$タイトル ;
保護された$の説明 。

//ゲッター/セッターのないパブリックプロパティ
パブリック $データ ;

/ **
*タイトルプロパティのセッター
*
* @param string $ value
* @return mixed
* /
関数 setTitle ( $ value ) {
$ this- > title = ucfirst ( $ value ) ;
}

/ **
*タイトルプロパティのゲッター
*
* @return mixed
* /
関数 getTitle ( ) {
$ this- > titleを 返し ます。 「!!!」 ;
}
}

$ MyClass = new MyClass ( ) ;
$ MyClass- > title = '記事のタイトル' ;

echo $ MyClass- > title ;


この詐欺の結果、次の結果が得られます。

記事タイトル!!!


ご覧のように、そのようなクラスには存在する権利さえあります;)

ここに私がした簡単な作成があります。私のブログからダウンロードできます:

oObject ver.0.1

PSこれらのクラスは、実世界のプロジェクトに住んでいると主張せず、非OOP PHPの神話を払拭するように設計されており、初心者プログラマーによる研究のための良い資料としても役立ちます...

PPS私はこれをholivaraのために書くことを約束しました ...

Source: https://habr.com/ru/post/J47785/


All Articles