问下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是什么类型的
dump($test);
打印下, 可以看到白能量类型及内容
另外
访问控制(可见性)
对象吧
从你的描述看
$test
的类型大概率是\App\Services\TestService
除非你在AppServiceProvider
里面将'\App\Services\TestService'
注册为其他类型。你上面也写了
protected
仅能从类型或衍生类内部访问,那么你这样写$test->url
就不能算类型“内部”了,只有使用$this->url
才能算内部访问。这跟
app()
没关系,你自己new
一个试试?不一样报错吗你这个问题也很奇怪,你认为的对象是什么?类是什么?
类的实例,而且
protected
本来就不能直接访问就是通过反射实例化的类