如何使用命名空间包含PHP类

时间:2017-04-26 10:42:15

标签: php namespaces

我还没有完全了解PHP中的命名空间。我也不使用作曲家或自动装弹机。我理解他们,但往往很难将他们纳入我自己的项目中。

所以我想在我正在开发的Wordpress插件中包含一个包,特别是这个https://github.com/elliotboney/thinkific-php

我可以包含主文件OK,但在调用该文件中的函数时会收到以下错误。我不确定它是否与其使用命名空间的事实有关,或者仅仅是因为它试图将文件包含在Api子文件夹中,一旦我将主文件包含在我自己的代码中就不会是正确的路径。

有谁知道如何在我自己的项目中包含此软件包?

require_once('Thinkific/Thinkific.php');

    $think = new \Thinkific\Thinkific([
    'apikey'    => 'xxxxxxxxx',
    'subdomain' => 'yyyyyyyyy',
    'debug'     => true
]);

$users = $think->users();
$users = $users->getAll();

但这是错误,它表明未加载Api子文件夹中的类文件和类。

Fatal error: Uncaught Error: Class '\Thinkific\Api\Users' not found in Fatal error: Uncaught Error: Class '\Thinkific\Api\Users' not found in /mysite/public_html/wp-content/plugins/thinkific/Thinkific/Thinkific.php:51 Stack trace: #0 /mysite/public_html/wp-content/plugins/thinkific/Thinkific/Thinkific.php(36): Thinkific\Thinkific->getApi('\\Thinkific\\Api\\...') #1 /mysite/public_html/wp-content/plugins/thinkific/thinkific.php(50): Thinkific\Thinkific->__call('users', Array) #2 /mysite/public_html/wp-content/plugins/thinkific/thinkific.php(29): Thinkific::thinkific_get_users() #3 /mysite/public_html/wp-includes/class-wp-hook.php(298): thinkific_woocommerce_order_status_completed(Object(WP)) #4 /mysite/public_html/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters('', Array) #5 /mysite/public_html/wp-includes/plugin.php(515): WP_Hook->do_action(Array) #6 /mysite/public_html/wp-includes/class-wp.php(746): do_action_ref_array('wp in /mysite/public_html/wp-content/plugins/thinkific/Thinkific/Thinkific.php on line 51

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

lib.php:

<?php
// Application library 1
namespace App\Lib1;
const MYCONST = 'Hello,';

// Application library 1
namespace App\Lib2;
const MYCONST = 'How are you?';

function MyFunction() {
    return __FUNCTION__;
}

class MyClass {
    static function WhoAmI() {
        return __METHOD__;
    }
}

?>

myapp.php:

<?php
require_once('lib.php');

echo App\Lib1\MYCONST . "\n";

echo App\Lib2\MYCONST . "\n\n";

echo App\Lib2\MyFunction() . "\n";
echo App\Lib2\MyClass::WhoAmI() . "\n";

?>

答案 1 :(得分:0)

您使用的库取决于composer,您在composer install处所在的位置会生成vendor/autoload.php,您只需在这里生成vendor/autoload.php这个文件将负责你自动加载类。

require_once 'vendor/autoload.php';
$think = new \Thinkific\Thinkific([
    'apikey'    => 'xxxxxxxxx',
    'subdomain' => 'yyyyyyyyy',
    'debug'     => true
]);

$users = $think->users();
$users = $users->getAll();