【问题标题】:PHP soap and namespaces. PHP Fatal error: Class 'Jira\SoapClient' not foundPHP 肥皂和命名空间。 PHP 致命错误:找不到类“Jira\SoapClient”
【发布时间】:2012-02-17 11:17:03
【问题描述】:

我们正在更新我们的代码库以使用 PHP-5.3+ 中提供的命名空间功能

以前,我们的文件都在 /htdocs/php 中的网络服务器上愉快地生活,但现在我们正在分离我们的脚本,并将我们的 PHP 库放在 /htdocs/php/lib/ 中

在 /htdocs/php/lib/ 中,我们有一个名为 Jira.php 的文件,我们为其指定了一个命名空间:

<?php
# Define a namespace for this library
namespace Jira;

function create_client($jira_url, $options)
{
    global $client;

    try
    {
            $client = new SoapClient($jira_url, $options);
    }
    catch (Exception $error)
    {
            echo $error -> getMessage() . "<br/><p style='color:red'> Could not connect to Jira </p>";
    }
}
?>

但是,当我们尝试从 /htdocs/php 中的脚本调用此函数时,我们会收到 class not found 错误:

PHP Fatal error:  Class 'Jira\SoapClient' not found

当我们尝试创建 SoapClient 对象时失败。

我已确认我已在 /usr/share/php/SOAP/ 中安装了 php-soap 包 和 php_info();显示它已启用等。

所以这大概是命名空间约定的问题。我们如何在不引发错误的情况下包含该类?

问候, ns

【问题讨论】:

    标签: php apache soap ubuntu


    【解决方案1】:

    SoapClient 可能已分配给全局命名空间。

    在您的脚本中,当前命名空间是Jira.

    尝试使用:

    $client = new \SoapClient($jira_url, $options); 
    

    【讨论】:

    • 忘了补充,SoapClient 前面的 \ 表示全局命名空间。因此,如果您在 modules 命名空间中有另一个类,请使用 \modules\myclass 来引用它。您还应该查看使用声明 (php.net/manual/en/language.namespaces.importing.php)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2014-08-05
    • 2019-08-31
    相关资源
    最近更新 更多