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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

dump($test);

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

另外
访问控制(可见性)

5个月前 评论
sanders

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

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

5个月前 评论

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

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

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

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

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

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

就是通过反射实例化的类

5个月前 评论

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