【发布时间】:2016-01-26 20:56:09
【问题描述】:
我已经使用 composer 安装了https://packagist.org/packages/pusher/pusher-php-server,并且我的应用程序中的所有包都是 PSR-4 自动加载的。
我能够使用从没有提及“使用命名空间”的页面调用的基本代码成功连接到 Pusher API:
$pusher = new Pusher(
$app->config->get('pusher.api-key'),
$app->config->get('pusher.api-secret'),
$app->config->get('pusher.app-id'),
array('encrypted' => true)
);
我决定将所有 Pusher 连接代码都放在它自己的类中,所以我在它自己的命名空间中创建了下面的类,并将其保存为 PusherConnect.php 在 Smawt/Helpers 目录中:
<?php
namespace Smawt\Helpers;
class PusherConnect
{
protected $app;
public function __construct($app)
{
$this->app = $app;
$pusher = new Pusher(
$this->app->config->get('pusher.api-key'),
$this->app->config->get('pusher.api-secret'),
$this->app->config->get('pusher.app-id'),
array('encrypted' => true)
);
$results = $pusher->get_channels( array( 'filter_by_prefix' => 'user_') );
$channel_count = count($results->channels);
$this->app->view->appendData([
'channels_count' => $channel_count
]);
$pusher->channel_count = $channel_count;
return $pusher;
}
public function check()
{
if (!$this->app->config->get('pusher.api-key')) {
$this->app->flash('global', 'No Pusher account has been set up.');
return $this->app->response->redirect($this->app->urlFor('home'));
}
}
}
然后我用
实例化对象<?php
use Smawt\Helpers\PusherConnect;
$pusher = new PusherConnect($app);
但我遇到了
Fatal error: Class 'Smawt\Helpers\Pusher' not found in C:\Users\...\PusherConnect.php on line 13
所以,我意识到 pusher-php-server 类没有命名空间,因为 Composer 生成的 autoload_psr4.php 文件中没有提到 Pusher 命名空间。所以,我编辑了供应商提供的 Pusher.php 文件:
namespace Pusher;
class PusherException extends \Exception
{
}
class Pusher
{ ...
还有我自己的 PusherConnect 类
public function __construct($app)
{
$this->app = $app;
$pusher = new \Pusher\Pusher(
一切都开始工作了。
问题似乎与从我自己的类中实例化非命名空间的 Pusher 类有关,该类是命名空间的。 所以,我的问题是“我如何防止 Composer 覆盖我的更改,下次我作曲家更新时,还有,为什么我不能通过引用我自己的全局命名空间来避免对 Composer 安装包的这种编辑班级?”比如在我自己的 PusherConnect 类中
public function __construct($app)
{
$this->app = $app;
$pusher = new \Pusher(
顺便说一下,Pusher 库似乎曾经是命名空间的,但现在不再是:https://github.com/pusher/pusher-http-php/commit/fea385ade9aede97b37267d5be2fce59d0f1b09d
提前致谢
【问题讨论】:
标签: php namespaces composer-php pusher