既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
}
}
namespace script;
class Car{
public function pay(){
return 1;
}
}
namespace script;
class House{
public function pay(){
return 2;
}
}
// 当对象注入, 并调用对象的方法
$car = new Car();
h
o
u
s
e
=
n
e
w
H
o
u
s
e
(
)
;
P
e
r
s
o
n
:
:
b
u
y
(
house = new House(); Person::buy(
house=newHouse();Person::buy(car);
Person::buy($house);
###### 4. 反射机制
1. 利用反射机制可以实例化类以及使用和访问类方法, 属性, 参数和注释等
/**
* 初步认识反射机制
* Class A
* @package script
*/
namespace script;
class A
{
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’);
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
;
[外链图片转存中…(img-0nVXp37G-1715560123724)]
[外链图片转存中…(img-YKi8GtHm-1715560123725)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!