php - CI 访问接口(interface)上的属性

标签 php laravel interface scrutinizer

我正在使用 scrutinizer 来分析我的代码。几乎所有内容都已修复,但我似乎无法解决此问题。

Accessing id on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?

我看到了问题,因为它是一个不存在的接口(interface),但我的代码工作正常。那我分析代码的时候怎么才能让这段代码通过呢?

谢谢

编辑

在这几行报错(其他一些文件也差不多)

$this->tracert->log(
            'users',
            $this->auth->user()->id,
            $this->auth->user()->id,
            'Login'
        );

该类的构造函数

 /**
 * @param \Illuminate\Contracts\Auth\Guard $auth
 * @param \jorenvanhocht\Tracert\Tracert $tracert
 */
public function __construct(Guard $auth, Tracert $tracert)
{
    parent::__construct($auth);
    $this->tracert = $tracert;
}

我的基本 Controller 的构造函数:

public function __construct(Guard $auth)
{
    $this->auth = $auth;
    $this->config = objectify(config('blogify'));
    $this->auth_user = $this->auth->check() ? $this->auth->user() : false;
}

二手合约https://github.com/illuminate/contracts/blob/master/Auth/Guard.php

最佳答案

要解决已验证用户的 id 问题,您应该使用:

$this->auth->user()->getAuthIdentifier()

Interface由方法组成。您正在直接访问属性。例如 $foo->id 而不是 $foo->getId()。当然,您必须向接口(interface)添加新方法。

解决方法是告诉审查员,$object 是所需类的实例

if ($object instanceof MyClass) {
    //
}

关于php - CI 访问接口(interface)上的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774076/

相关文章:

PHP OOP 查询未执行

php - Laravel 5.3,检查上传的文件是否大于 upload_max_filesize(可选上传)

php - 未加载 WebPush gmp 扩展,但需要使用 payload 发送推送通知。您可以在 php.ini 中修复此问题

c++ - Lippman 的 C++ Primer 中的设计模式

java - 提供类型安全的方法有用吗?

mysql - MS SQL 数据库管理/IDE

php - 内存不足PHP Laravel 5.6

php - 一台机器上多个服务器/php 版本的自动化单元测试

php - SugarCRM 安装卡住

php - Laravel 5.2 使用 AJAX 更新表并添加新记录,无需重新加载页面