问下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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 11

dump($test);

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

另外
访问控制(可见性)

7个月前 评论
sanders

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

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

7个月前 评论

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

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

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

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

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

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

就是通过反射实例化的类

7个月前 评论

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