Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@fagai

Phalconの本家ソースはどこにあるのか

こんばんは。
Phalcon PHP Frameworkという元はPHPの拡張で書かれたフレームワークがあります。
このフレームワークはZephirと呼ばれるPHPライクな感じで書く言語で書かれています。

なぜこの記事を書いたのか

残念なことに、phalconのドキュメントは更新が遅いので新しく入った機能を使いたくなった場合、ドキュメントだけでは分からないので結局PRなどからzepのソースを読むことになるのです。

また、少し関係ないですが公式のドキュメントも日本語化されている方はページによってはmarkdownが崩れていたりと辛かったりします。(結局英語ドキュメントを見たほうが良いことに)

なお、Phalconは予定では6からPHPソース版がリリースされるので、今後は読むのは楽になると思います。

ソースはどこにあるのか

ソースは以下にあります。

2021/05/03現在、このリポジトリのphalconディレクトリにコアコードが置かれています。

読み方

まあ実際にzepという拡張子(Zephir言語で書かれたもの)は結構PHPライクなもので書かれているのでそこまで困らないと思います。(内部ソースを見るに、phpの関数も呼べるようです。)

ちょっとメソッドを少し見てみましょう。Logger.zepのlog関数です。

/**
 * Logs with an arbitrary level.
 *
 * @param mixed  level
 * @param string message
 */
public function log(level, message, array context = []) -> void
{
    var intLevel;

    let intLevel = this->getLevelNumber(level);

   this->addMessage(intLevel, (string) message, context);
}

phpdocみたいなのも書かれていますし、まさにPHPみたいな感じです。
ただし気になるところとして、varletがあります。

varは動的変数の定義です。Zephirでは変数定義が必要です。
そして、letは変数の初期化に使われます。

一応、一緒に初期化することも出来ますが(var a = "aaa")、phalconのソースではあまり見受けられません。

Zephirのドキュメントは以下にあります。

ちょっと面倒なこと

これはphalconのソースなのですがphalconに問題があったときに、phalconに問題があるのか、zephirに問題があるのかを追っかけないと分からないです。(つらい)

PHPの拡張であるものの、PHPとは若干異なる次元で動いてるためReflectionなどに影響があるときがあります。

普段の開発では

普段の開発だと、毎回毎回ドキュメントを追っかけることは流石にきついので、phalconにはide-stubsと呼ばれるIDE用のスタブがライブラリとして存在します。(LaravelのIDE helper的なやつです)

このide-stubsは、zephirのソースにある
https://github.com/zephir-lang/zephir/blob/development/Library/Stubs/Generator.php
が生成を行います。

現状では自動で生成してpushされるような状態になっていないので、最新のものが出たとしても待つ必要があります。
また、zephir側の静的解析が雑な関係で部分的に返却する型や引数の情報がコアソースと異なる場合があるので注意しましょう。(早く色々解決してほしい)

しかしながら無いよりはすごく助かるスタブなので、もしphalcon使っていて入れてない人は入れたほうが良いでしょう。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
fagai
Webプログラマだよー、LaravelとDockerやるよー

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?