2016-10-01 6 views
2

私はPHPでORMを作成していますが、コメントアノテーションのテーブル、カラム、データベースなどに注釈を付けるのは良い考えです。コメントの注釈を取得するために PHPでコメントのアノテーションを取得すると、コメントが電子メールに届きます

が、私はこの

How to find annotations in a PHP5 object?

してみてくださいしかし、私はいくつかの問題をした、これは、これらが@文字を持っている場合は、注釈されていない一部の電子メール、またはその他のテキストが含まれます。

これは私の関数である:基本的に

public function getAnnotationArrayFromDocComment($docComment) { 
    $annotationsArray = []; 
    preg_match_all('#@(.*?)\n#s', $docComment, $annotations); 
    foreach ($annotations[1] as $annotation) { 
     $explotedAnnotation = explode(" ", $annotation); 
     if (isset($explotedAnnotation[1])) $annotationsArray[trim($explotedAnnotation[0])] = trim($explotedAnnotation[1]); 
     else $annotationsArray[trim($explotedAnnotation[0])] = ""; 
    } 
    return $annotationsArray; 
} 

、この機能を、このような構造を持つ配列を返す:

["annotation" => "valueOfAnnotation"] 

私は最初の単語だけを得ることを「間違い」のconcientよ私の次のステップはこれを解決することです。

/** 
* Created by Someone <[email protected]> 
* This class do anything 
* 
* @package namespace 
*/ 

私はこれをしたい:

ここでの問題は、コメントは@文字といくつかの電子メールアドレス、または他のテキストを持っている場合、これらは、例えば、注釈のような配列に表示され、いくつかのコメントです戻り値:

["package" => "namespace"] 

しかし、このリターン:

["example.com>" => "", "package" => "namespace"] 

は¿DOのために誰かのアイデアを持っていますこの?

私の英語で間違いがありましたら、私の自然言語ではありません。

+0

これを行うにはPHPDocパーサーを見ましたか? –

答えて

2

メールアドレスでは、@は常に他の文字に近いですが、実際の注釈では常に少なくとも1つのスペースが先行しています。

だから、あなたは単にそれを反映するように正規表現を変更する場合があります:

preg_match_all('# @(.*?)\n#s', $docComment, $annotations); 

をし、あなたの機能であなたは無用だった注釈をアメノナカノ青空すでにtrim()しているので、それは、他に何もせずに正常に動作します今まで:

+0

何人かのプログラマーが、1つのスペースで注釈を先行しないとどうなりますか?私はこれがかのうであるかどうかわからないんだけど、行うことができます。 /** このクラスは、何もやる @Annotation */ それとも /** *このクラスは何も * @注釈 を行います*/ 現在のところ、私はこのソリューションを使用しており、細かい作業をしています。 –

+0

@IvanMontilla私はそれが起こることに同意します。しかし、アノテーションの構文ルールに対してはエラーになります。だから、このケースは他のエラー(ソース内)よりも重要ではなく、アノテーションを見逃す可能性があると思います(たとえば、同じ行の2つのアノテーション)。 – cFreed

+0

応答と礼拝のおかげで、この場合、私はあなたの答えを有効なものとして使います。 –

関連する問題