2012-11-04 103 views
0

我正在設置一個jenkins作業來構建和部署Zend Framework 2 php應用程序。 在我的ant構建腳本中,我定義了一個用於驗證php文件的lint作業。在Jenkins中構建和部署Zend Framework PHP應用程序

構建作業失敗,因爲lint在ZF2庫文件中檢測到錯誤。

這是由棉絨產生的輸出:

[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> 
+0

如果您發佈了作業的定義,那麼您的問題對未來的訪問者會更有用。我不知道我是否會對任何人回答問題的能力產生影響(這是我沒有降低這一點的原因),但通常只是發佈錯誤消息並不是很有幫助。 – Ben

+0

你使用什麼版本的PHP?通常情況下,靜態工廠方法沒有問題(沒有任何構造函數)。最新的標記(2.0.3)看起來像這樣,並在我的機器上(php 5.3.14)罰款:罰款:https://github.com/zendframework/zf2/blob/7f49f1e1a22994ea5d7cf4da1c49119df274b99d/library/Zend/Captcha/Factory.php #L20 –

+0

@Jurian Sluiman:謝謝你的迴應。 我使用PHP 5.3.2-1ubuntu4。18與Suhosin-Patch – MadeOfSport

回答

4

你的問題是因爲Zend框架需要PHP 5.3.3或更高版本。由於你的詹金斯盒子使用5.3.2,這給了各種各樣的問題。其中之一顯然是你現在的錯誤。

我想你之前沒有注意到這個錯誤,因爲在開發系統上你有5.3.3+的安裝。嘗試將您的測試環境更新到更新版本的PHP,這將消除此特定問題。

更新

爲了澄清我的回答了一下,有一個向後的PHP 5.3.3的兼容性突破其回來在您的環境。檢查this changelog特別是本聲明:

向後兼容的變化:

具有相同名稱的方法作爲一個命名空間的類名的最後一個元素將不再作爲構造處理。此更改不會影響非命名空間類。

<?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 
    } 
} 
?> 

有一個從5.2.x對移民沒有影響,因爲命名空間是在PHP 5.3只介紹。

Zend\Captcha\Factory的情況下,有一種方法factory()這是靜態的,所以你可以調用Zend\Captcha\Factory::factory()。在php 4和5中最高爲5.3.2,這種方法是也是解析爲工廠的構造函數。而構造函數不能是靜態的。

linter會給你這種情況的致命錯誤。

+0

@MadeOfSport看到我的更新,我向你展示了爲什麼PHP 5.3.2在這種情況下不起作用的原因。 –

+0

完美。非常感謝您的精確度。 – MadeOfSport

相關問題