2024年Go最新TP框架的一些知识_tp csdn(1),2024年最新中高级Golang大厂高频面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

public $a = 1;
private $b = 2;
public static $instance = null;
/\*\*

* A类的ab方法
* @param $a
* @param KaTeX parse error: Undefined control sequence: \* at position 4: b \̲*̲ @return string…a, KaTeX parse error: Expected '}', got 'EOF' at end of input: … return 'a: '.a .'_b: ’ . $b;
}

/\*\*

* type
* @param int KaTeX parse error: Undefined control sequence: \* at position 7: type \̲*̲ @return string…type = 1){
return 'cd: '. $type;
}
}



$a = new A();
KaTeX parse error: Undefined control sequence: \ReflectionClass at position 11: obj = new \̲R̲e̲f̲l̲e̲c̲t̲i̲o̲n̲C̲l̲a̲s̲s̲(a); //创建A的反射类
$instance = $obj->newInstance(); // 相当于实例化这个类
/**
* array(2) {
[0] =>
class ReflectionMethod#3 (2) {
public $name =>
string(2) “ab”
public $class =>
string(1) “A”
}
[1] =>
class ReflectionMethod#4 (2) {
public $name =>
string(2) “cd”
public $class =>
string(1) “A”
}
}

*/
$methods = o b j − > g e t M e t h o d s ( ) ; / / 获取这个类的所有方法 f o r e a c h ( obj->getMethods(); // 获取这个类的所有方法 foreach ( obj>getMethods();//获取这个类的所有方法foreach(methods as $method){
$method->getDocComment(); // 获取每个方法的注释
}
$obj->getProperties(); // 获取该类中的所有属性, 公共/私有/静态

// 调用该类中的方法
$instance->ab(‘123’, ‘456’);
// 或者
$method = $obj->getMethod(‘ab’); // 获取要调用的方法
m e t h o d − > i n v o k e A r g s ( method->invokeArgs( method>invokeArgs(instance, [‘111’, ‘222’]); // 调用带参数的方法, 传入对象和参数
// 调用不带参数的方法
$method = $obj->getMethod(‘cd’);
m e t h o d − > i n v o k e ( method->invoke( method>invoke(instance);

// 创建A的反射类, 并使用A类中的方法
KaTeX parse error: Undefined control sequence: \ReflectionMethod at position 17: …bjMethod = new \̲R̲e̲f̲l̲e̲c̲t̲i̲o̲n̲M̲e̲t̲h̲o̲d̲(a, ‘ab’);
$objMethod->isPublic(); // 判断某个方法是不是公共的
$objMethod->isStatic(); //判断是否静态方法
$objMethod->getParameters(); // 获取该方法的参数
$objMethod->getNumberOfParameters(); //获取该方法的参数个数


###### 5. 工厂模式



namespace script;
/**
* 定义一个接口
* 发送短信接口, 固定方法和参数
* Interface Sms
* @package script\sms
*/
interface Sms
{
public static function send($phone, $code);
}



namespace script;
/**
* 去实现Sms的方法
* 阿里短信服务
* Class Ali
* @package script\sms
*/
class Ali implements Sms
{
public static function send($phone, $code){
//
return ‘Ali-Sms’;
}
}



namespace script;

/**
* 去实现Sms的方法
* 七牛短信服务
* Class Qiniu
* @package script\sms
*/
class Qiniu implements Sms
{
public static function send($phone, $code)
{
// TODO: Implement send() method.
return ‘Qiniu-Sms’;
}
}



namespace script;

/**
* 去实现Sms的方法
* 百度短信服务
* Class Baidu
* @package script\sms
*/
class Baidu implements Sms
{
public static function send($phone, $code)
{
// TODO: Implement send() method.
return ‘Baidu-Sms’;
}
}



include ‘Sms.php’;
$type = ‘Ali’;
include $type.‘.php’;
c l a s s = " s c r i p t " . class = "script\\". class="script".type;
echo c l a s s : : s e n d ( class::send( class::send(phone,$code);


###### 6. 容器



namespace script;
/**
* 容器理解
* Class Container
* @package script
*/
class Container
{
/**
* 容器中的对象实例
* @var null
*/
protected static $instance = null;
/**
* 存放容器的数据 (注册树)
* @var array
*/
public $objects = [];

private function \_\_construct()
{

}

/\*\*

* 获取当前容器的实例
* 单例模式
* @return null|Container
*/
public static function getInstance(){
if (is_null(self::KaTeX parse error: Expected '}', got 'EOF' at end of input: … self::instance = new self();
}

    return self::$instance;
}

/\*\*

* 设置当前容器的数据
* 挂载到注册树
* @param $key
* @param KaTeX parse error: Undefined control sequence: \* at position 8: value \̲*̲/ public fu…key, $value){
t h i s − > o b j e c t s [ this->objects[ this>objects[key] = $value;
}

/\*\*

* 获取当前容器的数据
* 从注册树中直接获取
* 反射机制
* @param KaTeX parse error: Undefined control sequence: \* at position 6: key \̲*̲ @return mixed …key){

    if ($this->objects[$key]) $key = $this->objects[$key];

    $reflect = new \ReflectionClass($key); // 创建该类的反射类
    // 获取类的构造函数
    $construct = $reflect->getConstructor();
    if (!$construct){
        // 不存在构造函数
        return new $key;
    }

    // 获取构造函数的参数
    $params = $construct->getParameters();
    if (!$params) return new $key;

    $args = [];
    foreach ($params as $param){
        $class = $param->getClass();
        if ($class) {
            $args[] = $this->get($class->name);
        }
    }

    return $reflect->newInstanceArgs($args);

}

}

// 注入容器
Container::getInstance()->set(‘person’, ‘script\Person’);
Container::getInstance()->set(‘car’, ‘script\Car’);
// 获取

o b j = C o n t a i n e r : : g e t I n s t a n c e ( ) − > g e t ( ′ p e r s o n ′ ) ; v a r _ d u m p ( obj = Container::getInstance()->get('person'); var\_dump( obj=Container::getInstance()>get(person);var_dump(obj->buy());



namespace script;

/**
* 初步认识
* Class Person
* @package app\common\lib
*/
class Person
{
public $obj;
public $name;

/\*\*

* 默认Car类
* Person constructor.
* @param Car $object
* @param string $name
*/
public function __construct(Car $object, $name = ‘nobody’)
{
$this->obj = $object;
$this->name = $name;
}

/\*\*

* @return string
*/
public function buy(){
return $this->name . ‘|’ . $this->obj->pay();
}
}



namespace script;
class Car{
public function pay(){
return 1;
}
}







![img](https://img-blog.csdnimg.cn/img_convert/a7ca4716bca5fe84fce3a4db32f1bafd.png)
![img](https://img-blog.csdnimg.cn/img_convert/ab699237c492be0b9ed95b2248a47346.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**




[外链图片转存中...(img-pIcwpmIQ-1715384102198)]
[外链图片转存中...(img-Tn7nCjOu-1715384102198)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值