1

Zend Framework2phpアプリケーションをビルドしてデプロイするためのjenkinsジョブを設定しています。私のantビルドスクリプトでは、phpファイルを検証するためのlintジョブを定義しました。

lintがZF2ライブラリファイルでエラーを検出したため、ビルドジョブが失敗しました。

これは、lintによって生成された出力です。

[apply] PHP Fatal error:  Constructor Zend\Captcha\Factory::factory() cannot be static in /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php on line 90
[apply] Errors parsing /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php

誰かがなぜの検証を知っていますZend/Captcha/Factory.php failsか?

ANTタスクは次のようになります。

    <target name="lint" description="Perform syntax check of sourcecode files">
  <apply executable="php" failonerror="true">
   <arg value="-l" />

   <fileset dir="${basedir}/">
    <include name="**/*.php" />
    <modified />
   </fileset>

   <fileset dir="${basedir}/tests">
    <include name="**/*.php" />
    <modified />
   </fileset>
  </apply>
 </target>
4

1 に答える 1

5

あなたの問題は、ZendFrameworkがphp5.3.3以降を必要とするためです。Jenkinsボックスは5.3.2を使用しているため、これによりさまざまな問題が発生します。それらの1つは、明らかに現在のエラーです。

開発システムには5.3.3以降がインストールされているため、これまでエラーに気づかなかったと思います。テスト環境を新しいバージョンのphpに更新してみてください。これにより、この特定の問題が解消されます。

アップデート

私の答えを少し明確にするために、php5.3.3には下位互換性の問題が1つあります。これはご使用の環境に戻ります。この変更ログ、特に次のステートメントを確認してください。

後方互換性のない変更:

名前空間付きクラス名の最後の要素と同じ名前のメソッドは、コンストラクターとして扱われなくなります。この変更は、名前空間のないクラスには影響しません。

<?php
namespace Foo;
class Bar {
    public function Bar() {
        // treated as constructor in PHP 5.3.0-5.3.2
        // treated as regular method in PHP 5.3.3
    }
}
?>

名前空間はPHP5.3でのみ導入されたため、5.2.xからの移行への影響はありません。

の場合、静的なZend\Captcha\Factoryメソッドfactory()があるので、を呼び出すことができますZend\Captcha\Factory::factory()。5.3.2までのphp4および5では、このメソッドはファクトリのコンストラクターとして解析されます。また、コンストラクターを静的にすることはできません。

この場合、リンターは致命的なエラーを発生させます。

于 2012-11-04T21:26:55.303 に答える