问下laravel里面$test = app('\App\Services\TestService');这样获取的$test是对象还是类呢?

情况是这样的,我那个TestService.php文件里面有

class TestService
{
    protected $url;
    public function __construct()
    {
        $this->url = 'test.com';
    }
}

然后我再一个控制器里面获取url

$test = app('\App\Services\TestService');
echo $test->url;

就报错,当把url设置成public就可以
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。
所以我问下我这个$test是什么类型的

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 11

dump($test);

打印下, 可以看到白能量类型及内容

另外
访问控制(可见性)

9个月前 评论
sanders

从你的描述看 $test 的类型大概率是 \App\Services\TestService 除非你在 AppServiceProvider 里面将 '\App\Services\TestService' 注册为其他类型。

你上面也写了 protected 仅能从类型或衍生类内部访问,那么你这样写 $test->url 就不能算类型“内部”了,只有使用 $this->url 才能算内部访问。

9个月前 评论

这跟 app() 没关系,你自己 new 一个试试?不一样报错吗

$test = new TestService();
echo $test->url;

你这个问题也很奇怪,你认为的对象是什么?类是什么?

9个月前 评论
lyxxxh 9个月前
donggan (楼主) 9个月前

类的实例,而且 protected 本来就不能直接访问

9个月前 评论
donggan (楼主) 9个月前
乘马班如 (作者) 9个月前
donggan (楼主) 9个月前

就是通过反射实例化的类

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!