パーサーのコンセプトphp-> php

画像

肥大化した構造と内包物のとらえどころのない抑制構造を持ついくつかのプロジェクトの後、私はもっと便利で最適なことをしようとしました。

それはすべて、インクルードを削除しようとしたという事実から始まりました。 はい、はい:)

各ラインとテストの偏執的な最適化により、最大の最適化を達成するために、

各ページは、必要なビルディングブロックのみを使用する必要があります。 そして、これらの構成要素はすべてページの一部である必要があります。



ちょうどこの時点で、PHPでのOOPの実装を積極的に研究していました。

彼のパーサーで構造ブロックを呼び出すことにしました-コンテナはクラスメソッドです。

これで、プロジェクト全体が明確に構造化されたブロックで提示されました。各ブロックはサイトのどこでも使用できます。 構造をよりよく理解するために、すべてのブロックで誤ったタグが使用されています。ZendStudioでは紫色を使用しています。



サイトのメインページの構造の例を示します。



画像



なぜ私にとって便利なのですか:



1.柔軟な開発管理





多くの場合、サイトを緊急に変更する必要があるという事実に直面する必要がありますが、同時に、最も重要な領域を編集して、

データベースまたはサイトの他の重要な部分への接続を担当している場合、あなたは間違いを犯し、サイトは新しい訪問者に鈍いデザイン(せいぜい)またはコンテンツの完全な欠如で会います。

これまでのところ、この問題に対する解決策は2つしかありません。

サイトの非表示ページの1つでファイルのコピーを編集するか、ローカルサーバーでサイトを編集してから、既に動作しているモデルを読み込みます。

最も一般的なのは、ほとんどのユーザーがサイトにアクセスできなくなった夜間の編集です。



パーサーでは、正規表現を使用して再作成するページを指定します。

したがって、サイトの1ページまたはセグメント全体でテストを実行し、その後すぐに他のすべてを更新できます:)



2.プロジェクトコードの制御





phpファイルはほとんどの場合、サイトのルートおよびサブディレクトリに直接保存され、順序を維持しません。

一部のウェブマスターは、自分がどのコードを保存しているかわからず、サイトの裏に埋もれている関数を再び書き始めます。



このパーサーを使用すると、プロジェクトのすべてのコードを1つのファイル(project.xmlなど)に保存できます。

ただし、これは前提条件ではありません。 便宜上、好きなだけファイルを作成し、好きなディレクトリに配置できます。



3.柔軟な構文





新しいフレームワークとテンプレートエンジンを勉強するとき、多くの場合、関数名と思われる非論理的からの混乱に陥ります。



パーサーでは、好きな名前を指定し、アクションを変更できます。 不要な機能を追加または削除します。



4. php、css、(x)htmlコードの最適化





CSSと(x)htmlコードを圧縮するためのスクリプトがたくさんあります。 しかし、Zend Optimizerはあらゆるホスティングとはほど遠いものです。

誰もがそのようなホスティングを購入できるわけではありません。 はい、含めることを忘れないでください? :)



パーサーでは、php、css、(x)html、jsコードを必要に応じて最適化できます。 指定したinclude関数はlaです

ファイルの内容をページに直接挿入します。



5.静的なhtmlサイトを作成します



静的なサイトを作成するために、自分で書いたパーサーを書く必要はもうありません。



どこから始めますか?



まず、3つのファイルが必要です。



1-コンパイラー自体(ajaxもそれに行きます-便利な作業のためのクライアント)

2-メインプロジェクトファイル(project.xmlなど)

3-有効なページのファイル(再コンパイルする必要があるページのリストのみ)



次に、使用するマークアップを決定する必要があります。



後続のルール



OOPがプロジェクトで積極的に使用されている場合、競合状態を回避するために、マークアップで使用されるクラスを指定します。

デフォルトでは、グローバルデザインルールがデザインに指定されています。

例えば



!クラスエリア

!クラスunicate

!クラスmoiclass



たとえば、マークアップを発明して使用できます。



#define moiclass



いずれにせよ、パーサーがグローバルルールを見つけられない場合、正規表現に該当するすべての構成要素が分析されます

有効なクラス。



なぜ他のグローバルルールですか?

例:1行のみを追加することにした<?カタログのすべてのページ/カタログ/ error_reporting(0); ?>

構築!Method.AddBefore.regexp(^ /カタログ/)。文字列{{{<? error_reporting(0); ?>}}}(例として挙げます)

/ catalog /で始まる全員の前にこの行を追加します。



基本構造のマーキング




UPD:アスペクト指向プログラミングの基本に従って、基本概念を修正しました。



JointPoint(デフォルトでは<class :: method>)-プログラム実行の特定のポイント:メソッドの実行、クラス属性の変更、

メソッドの呼び出し、例外のスローなど。



<class.method> </ class.method>(アスペクト)クラスの類似物には、無制限の数のJoinPoint(<class :: method>)またはphp / html / css行を含めることができます。



#include file-文字列をファイルの内容で簡単に置き換えます。



UPD:コメントをありがとう、AOPの存在を知らないことはその原則を使用していました。



All Articles