php里怎么获取一个对象可以调用的所有方法和属性?

新手上路,请多包涵

最近在自学php,对代码里总是不知道哪里蹦出来的方法搞满头雾水,求解答?
以下十个laravel的一个控制器代码。

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostsController extends Controller
{
  
    public function create(){
        return view('posts.create');
    }

    public function store(){
        $data=request()->validate([
     
            'caption'=>'required',
            'image'=>['required','image'],
        ]);
        $imagePath=\request('image')->store('uploads','public');
        auth()->user()->posts()->create([  //比如这个auth哪来的,为什么可以引出这么多方法?
                'caption' => $data['caption'],
                'image' => $imagePath,
        ]);


        return redirect('/profile/' . auth()->user()->id);
    }
    
}

阅读 2.9k
4 个回答

建议先学PHP基础,再学框架。
现在的人都是本木倒置
auth是上面命名空间加载进来的,一层层加载,具体哪层要看源码。

用PHP提供的ReflectionClass

<?php

$ref = new ReflectionClass('Controller');

$props = $ref->getDefaultProperties();  //返回类中所有属性
echo "--------------------props:--------------" . PHP_EOL . PHP_EOL;
foreach ($props as $key => $val)
{
    echo "$key : $val" . PHP_EOL;   //  属性名和属性值
}

$methods = $ref->getMethods();     //返回类中所有方法
echo "-----------------methods:---------------" . PHP_EOL . PHP_EOL;
foreach ($methods as $method)
{
    echo $method->getName() . PHP_EOL;
}

一个类里边有什么方法可以用 ReflectionClass获取。
但是你说的这个auth()方法是框架内置的助手函数,基本上什么地方都能用。具体有多少这种助手函数,需要你自己看文档或者分析源码。

如果光看问题的标题,答案是 反射。

如果看问题描述,答案是 laravel文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题