问下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是什么类型的

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11

dump($test);

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

另外
访问控制(可见性)

10个月前 评论
sanders

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

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

10个月前 评论

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

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

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

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

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

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

就是通过反射实例化的类

10个月前 评论

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