簡體   English   中英

&和Joomla導致PHP嚴格錯誤

[英]PHP Strict errors with & and Joomla

據我所知,我正在幫助客戶解決一些問題,這些問題是在更新到PHP 5.5(Joomla當前為2.5.20)之后出現的。 錯誤歸因於Joomla CMS的某些行(盡管我不認為這是原因)。 無論哪種方式,以下都是一些代碼片段以及它們各自需要我幫助的錯誤:

$app =& JFactory::getApplication();

PHP嚴格標准:僅變量應通過引用分配...


public function getModel($name = 'Submission', $prefix = 'AwardAdminModel') 
        {
            $model = parent::getModel($name, $prefix, array('ignore_request' => true));
            return $model;
        }

getModel()應該與JController :: getModel($ name ='',$ prefix ='',$ config = Array)兼容


function display($cachable = false) 
    {
        JRequest::setVar('view', JRequest::getCmd('view', 'Submissions'));
        parent::display($cachable);
    }

display()應該與JController :: display($ cachable = false,$ urlparams = false)兼容


現在,我以前從未在我的PHP上使用“&”符號,但是由於PHP手冊的緣故,我對它的用途有所了解,但是我不確定為什么它會變得合適-我敢肯定我可以將其移除並且安全。

getModel方法在簽名中被標記為代理,並且足夠肯定,它在自身內部帶有3個參數的情況下調用它是正確的,因此我不確定為什么會出現問題。

任何有用的提示或解決方案將不勝感激。

謝謝。

通常,我總是建議不要更改供應商代碼。 將來,隨着供應商的更新,它可能會帶來一些麻煩。 考慮一個符合供應商期望的較低版本的PHP是否合適,或研究對供應商源存儲庫進行分叉,以便將來的供應商更新可以合並到該版本中。

回答您的問題:第一個錯誤:

PHP嚴格標准:僅變量應通過引用分配...

在PHP中, &通常用於為項目分配別名。 這使得可以通過多個名稱知道可能更改的項目,並且有時可能有用。 在同一項目中使用不同名稱時,它還曾經在PHP中使用,以使其效率更高,因為PHP每次給新名稱分配名稱時都會進行復制。

在后一種情況下,PHP的效率得到了顯着提高,因為v5和PHP強烈鼓勵使用&來僅對變量進行別名,並且僅在出於代碼目的在邏輯上有意義時才使用函數的返回值,因為從邏輯上講,它位於不再存在的函數的本地范圍內。

因此,是的,在函數調用上用=替換=&很可能是安全的。

第二個錯誤:

getModel()應該與JController :: getModel($ name ='',$ prefix ='',$ config = Array)兼容

發生這種情況是因為函數定義與父類不匹配。 有一個父類,它定義帶有3個參數的getModel。 您發布的代碼對它進行了擴展,該代碼僅使用兩個參數定義了getModel。

解決方案是更新功能定義以匹配父項。 這將使錯誤消失,但也可能誤導未來的開發人員,他們可能期望這些額外的參數會以非預期的方式起作用或使用該函數。 至少嘗試使用不祥的參數名稱來緩解這​​種情況:

public function getModel($name = 'Submission', $prefix = 'AwardAdminModel', $unused = array()) 
{
    $model = parent::getModel($name, $prefix, array('ignore_request' => true));
    return $model;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM