在magento中编写了一些帮助类之后,现在我遇到了这个问题,我收到了这个错误
致命错误:第33行的app\code\local\Uhma\Program\Helper\Data.php中找不到类'Zend_Log'
在第33行,我有这个
function WBSAPI_OnceProbe ()
{
return ( $this->WBSAPI_CurlCall ( "once?action=probe" , &$result) );//LINE 33
}
Run Code Online (Sandbox Code Playgroud)
我正在回复的函数就是这个
function WBSAPI_CurlCall ( $service , &$result=null )
{
try {
$s = curl_init();
curl_setopt($s,CURLOPT_URL,MYWBSAPIURL.$service);
curl_setopt($s,CURLOPT_POST,false);
curl_setopt($s, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($s);
curl_close($s);
$result = json_decode ( $output , TRUE );
if (!is_array($result)) return (false);
if (!key_exists('status',$result)) return (false);
if ($result['status'] != 0) return (false);
return ( true );
} catch ( Exception $e ) {
return ( false );
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在谷歌呆了一段时间了,有人说它是我的助手中的一个函数,它覆盖了magento的一个函数,我把WBSAPI_放在开头的所有函数中,所以,它不可能是原因,我继续得到同样的错误,我不知道还有什么可以尝试,需要一些帮助
如果它可以提供帮助,我的文件中还有其他一些定义,就像这样
define ('MYWBSAPIURL','wbsapi.withings.net/');
define ('MYAPIURL','scalews.withings.net/cgi-bin/');
define ('pound',0.453592);
define ('inch', 0.0254);
class Uhma_Program_Helper_Data extends Mage_Core_Helper_Abstract{
//CLASS CONTENT
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Ala*_*orm 21
你得到这个错误的原因是
有问题的代码是
$this->WBSAPI_CurlCall ( "once?action=probe" , &$result) );
Run Code Online (Sandbox Code Playgroud)
您在调用time(&$result)时通过引用传递变量.这在现代版本的PHP中已被折旧.如果没有自定义错误处理,您将收到类似的警告
PHP Warning: Call-time pass-by-reference has been deprecated;
Run Code Online (Sandbox Code Playgroud)
所以,$result没有了&.鉴于你的方法在其原型中声明的参数是传递参考,所以这样做不会在功能上改变你的代码.这应该照顾你当前的问题.
Magento给你这个错误的更大原因是它的自定义错误处理程序.
#File: app/code/core/Mage/Core/functions.php
function mageCoreErrorHandler($errno, $errstr, $errfile, $errline)
{
...
if (Mage::getIsDeveloperMode()) {
throw new Exception($errorMessage);
} else {
Mage::log($errorMessage, Zend_Log::ERR);
}
}
Run Code Online (Sandbox Code Playgroud)
由于您未在开发人员模式下工作,因此Magento尝试使用常量Zend_Log作为其类型来记录错误.问题是(或似乎是)如果您的错误在Magento引导程序/调度过程中发生得太快,Zend_Log则尚未加载,并且自动加载器不会处理它.这就是你收到错误的原因.
你应该修改你的代码,不要使用call-time pass by reference(&$result从你的调用代码中删除,而不是从函数定义中删除).如果你不想这样做,你可以试着lib/Zend/Log.php早点自己包括.我认为这是一个坏主意,所以我将把这些方法留作读者的练习.
此外,对于那些不熟悉"通过引用传递调用时间"这一术语的人来说,这意味着在调用方法时指示应该通过引用传递变量.
foo(&$bar);
Run Code Online (Sandbox Code Playgroud)
传递对函数的引用
$bar = &baz;
foo($bar);
Run Code Online (Sandbox Code Playgroud)
或者在方法的原型中声明一个参数,表明它应该通过引用传递
public function applyInApp(&$content)
{
}
Run Code Online (Sandbox Code Playgroud)
仍然是合法的PHP代码.
| 归档时间: |
|
| 查看次数: |
13569 次 |
| 最近记录: |