PHPの構文糖

怠け者、またはむしろ非常に怠け者だけが、PHPについていくつかの愛情深いものを言うことはありません。 標準ライブラリを詰め込んで状況を修正しようとする試みの半分以上、矛盾、および*好きな言語の置き換え*それだけ(状況)が悪化し、積極的に影響を与えるものは最終化されないという事実に対する開発者の批判を渡す価値があります ; もちろん、これは挑発であり、避けられないホリバーにつながりますが、これを避けましょう。 この主題に関するかなり長い熟考から、1つのアイデアが生まれました...



教えてください、言語の何かを変更しますか、それを修正しますか? 個人的に私と一緒に新しい言語とアプローチを習得しました。この考えはさらに強くなりました。 十分な知識なしに独自のインタープリターを書くことから始めて、かなりの数のアプローチを試みました-試みは失敗し、phpソース(インタープリターではなく、* .phpファイル自体)の書き換えで終わりました-最初にネイティブインタープリターは変更されたソースを解析し、それをコードに保存します\ savesデータはすでにそれらを解釈していますが、特定の結果を達成したので、この試みはその不便さと「不作法」のために埋められました。 そして、このベンチャーにほとんど失望しました-DevConfのスピーカーは私を助けてくれました(私が間違っていなければ-Alexander NightTiger )、それを疑うことなく。 レポートはアスペクト指向プログラミングに関するものであり、プレゼンターのリクエストの1つは正しい道を私に押し進めました。「PHPフィルターを知っている人を手を挙げてください」。



マニュアルを少し調べて、Aspectフレームワークのソースコードを読み直し(ちなみに、それらのいくつかは完全に異なっていました)、google-私はついに私が待ち望んでいた結果に到達しました-「Eureka!」 実行するコードを数時間ひざまずかせ、夢中になったのは、プロパティ、列挙、名前付きパラメーター、通常の型キャストなど、すべて、拡張機能なし、松葉杖なし、 hemo-ここでは幸福です! 数ヶ月かけて考え、ステンレス鋼から何百もの神経筋を書き込もうとしましたが、私が非常に慎重に大切にしていたことが本当に実現するのは本当に夢ですか? 私の「govnokod」(社会がそのようなわいせつな用語を許してくれるかもしれない)が本当にお金を稼いだとき、そして私がほとんど望んでいた方法でさえ、驚いたことを想像してください。

シードの場合:
<?php import Accessors, Enum, Properties from std; namespace Ololo { enum Color { Red, Blue, Green, Yellow } class Some { private: $asdasd = 23; $some = 42; public $some { get; set($value) { return (int)$value + 42; } } public function __construct() { echo Color::Red . \Ololo\Color::Blue; } } }
      
      







続いて:

1)プロジェクト計画の作成(ロードマップ)

2)スケッチした2時間の恐怖を完全に書き換える

3)コミュニティ調査。 意見、願い、離陸\ nafig_ono_nado



最初の問題にはほとんどの問題がありました。言語と完全に互換性のあるものを埋め込むというオプションに決めました-デフォルトで。 パラメーター、プロパティなどのすべての型の指示はすぐに利用できるようにする必要があります-それは後方互換性を損なうことはありません。



import from ;







ここで、「WHAT」はPSR-0仕様に基づくファイル\クラスの名前であり、「WHERE」は標準またはユーザーが手動で追加/作成したパッケージのセットを示します。 標準パッケージの現在のバージョンには次のものが含まれます。

リスト自体:
*ドラフトタイプのキャスト

* todo関数__init-クラスが初期化されると自動的に呼び出されるメソッド(ファイルが必要)

* todoプロパティ

* todo列挙

* todoアスペクト

* todo名前付きパラメーター

* todoプロパティのスコープの簡単な宣言\メソッド

* todoすべての機能の標準化と個別のスペースへの削除

*オブジェクトとしてのTodoスカラー



ドラフトはすでに完了しており、多かれ少なかれ使用する準備ができており、 todoは開発の段階\書き直し\ディスカッションのみです。



2番目のポイントもかなり判明しています。 ソースはかなりいいです(ハードヒットしないと思います:D) github.com/SerafimArts/Mirror



そして最後に、3番目の段落の下で-あなたの意見が興味深い、親愛なるhabrasocietyです。



あとがきの代わりに、私は注意したい:

-現時点では、コアは完全に準備ができています。

-github.com/SerafimArts/Mirror/wiki/Type-Castingのメソッド/関数のパラメーターに 、動作例を含む型変換を実装: github.com/SerafimArts/Mirror/blob/master/examples/TypeCasting/test.php

-単体テストなし

-ドキュメントはありませんが、完全にドキュメント化されたコードがあります

-Composer経由のインストールなし

-しかし、組み立てられたpharパッケージがあります



使用法:

 <?php require('phar://mirror.phar'); //  "lib/Mirror/bootstrap.php" require_mirror('path\to\file.php');
      
      





そして、require_mirror関数(またはinclude_mirror)を使用して接続されたファイル内で、絶対にすべての内部インクルード(標準関数を使用する場合も含む)を使用して、Mirror構文を使用することができます-これは、言語とパケットの反映として、この記事を呼んだ方法です-ガラスまたはプリズム(ガラス)を使用して言語を変更できます。



次の記事(もし起こるなら)で、ライブラリの内部構造-私自身の「プリズム」の書き方、キャッシングの仕組み、将来の詳細な計画、その他興味のあることを紹介します。 このプロジェクトは非常に粗雑です(黒海での休暇中に書かれました-ご存じのとおり)。この記事は、開発を事前に混乱させないように、フィードバックと提案を特に対象としています。 ご清聴ありがとうございました。



UPD: 「ガラス」という単語の英語の翻訳を修正しました



All Articles