首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
关于
友链
留言
壁纸
Search
1
关于《杀死那个石家庄人》背后的故事
346 阅读
2
摄影记录|鸿恩寺
260 阅读
3
沈阳故宫之旅
181 阅读
4
EasyWechat 微信小程序接入微信支付|笔记
125 阅读
5
PHP八大设计模式
122 阅读
编程技术
GoLang
Vue
PHP
Linux
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
如梦初醒
累计撰写
52
篇文章
累计收到
48
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
网络安全
生活杂记
页面
关于
友链
留言
壁纸
搜索到
20
篇与
的结果
2022-03-15
PHP魔术方法__get && __set
前言{callout color="#f0ad4e"}当我们试图获取一个不可达属性时(比如private),类会自动调用__get函数。当试图设置一个不可达属性时(比如private),类会自动调用__set函数{/callout}当非法调用私有变量时<?php namespace App\Http\Controllers; class TestController { public $name = '你的名字'; private $age = 18; }<?php namespace App\Http\Controllers; class IndexController { private $class; public function __construct(TestController $test) { $this->class = $test; } public function test() { return $this->class->age; } } 会产生一个报错{message type="error" content="Cannot access private property App\Http\Controllers\TestController::$age"/}当加入了__get() 方法<?php namespace App\Http\Controllers; class TestController { public $name = '你的名字'; private $age = 18; private $sex = '男'; function __get($name){ echo '姓名: '.$name.' 年龄:'.$this->age.'-性别'.$this->sex; } } 调用<?php namespace App\Http\Controllers; class IndexController { private $class; public function __construct(TestController $test) { $this->class = $test; } public function test() { return $this->class->age; } } 结果姓名: age 年龄:18-性别男{message type="info" content="可以看出test方法自动调用了 __get(),并可以访问私有变量。"/}__set() 同理<?php namespace App\Http\Controllers; class TestController { public $name = '你的名字'; private $age = 18; private $sex = '男'; function __set($age,$val){ $this->$age = $val; } public function getAge() { return $this->age; } } 调用<?php namespace App\Http\Controllers; class IndexController { private $class; public function __construct(TestController $test) { $this->class = $test; } public function test() { $this->class->age = 30; return $this->class->getAge(); } } 结果30
2022年03月15日
44 阅读
0 评论
0 点赞
2022-03-15
PHP(DI)依赖注入
依赖注入{callout color="#f0ad4e"}本质上是指对类的依赖通过构造器完成自动注入通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要借助另一个类的才能完成的最直接的标志就是 传参数据为对象 的时候。严格来说,你想在 另一个类中操作另一个类 ,这两个类之间形成了相互依赖关系, 传参的方式叫注入 {/callout}简单的例子<?php namespace App\Http\Controllers; class AdapterController { public $name = '欢迎访问依赖注入'; } 使用<?php namespace App\Http\Controllers; class IndexController { protected $Adapter; public function __construct(AdapterController $Adapter) { $this->Adapter = $Adapter; } public function test() { return 'Hello,' . $this->Adapter->name; } } 结果Hello,欢迎访问依赖注入高阶操作传统的写法<?php /** * 定义了一个消息类 * Class Message */ class Message{ public function seed() { return 'seed email'; } }/* * 订单产生的时候 需要发送消息 */ class Order{ protected $messager = ''; function __construct() { $this->messager = new Message(); } public function seed_msg() { return $this->messager->seed(); } } $Order = new Order(); $Order->seed_msg();{callout color="#f0ad4e"}上面的代码是我们传统的写法。首先由个消息发送的类。然后在我们需要发送消息的地方,调用发送消息的接口。有一天你需要添加一个发送短信的接口以满足不同的需求。那么你会发现你要再Message类里面做修改。同样也要再Order类里面做修改。这样就显得很麻烦。这个时候就有了依赖注入的思路。下面把代码做一个调整{/callout}依赖注入写法 为了约束我们先定义一个消息接口<?php namespace App\Http\Controllers; /** * 为了约束我们先定义一个消息接口 * Interface MessageInterface */ interface MessageInterface { public function send(); }有一个发送邮件的类<?php namespace App\Http\Controllers; /** * 有一个发送邮件的类 * Class SendEmailController */ class SendEmailController implements MessageInterface { public function send() { return 'send email'; } } 新增一个发送短信的类<?php namespace App\Http\Controllers; /** *新增一个发送短信的类 * Class SendSMSController */ class SendSMSController implements MessageInterface { public function send() { return 'send sms'; } } 订单产生的时候 需要发送消息<?php namespace App\Http\Controllers; /* * 订单产生的时候 需要发送消息 */ class OrderController { protected $messager = ''; function __construct(MessageInterface $message) { $this->messager = $message; } public function send_msg() { return $this->messager->send(); } } 调用<?php namespace App\Http\Controllers; class IndexController { public function test() { //我们需要发送邮件的时候 $message = new SendEmailController(); //将邮件发送对象作为参数传递给Order $Order = new OrderController($message); echo '触发邮件---'.$Order->send_msg().PHP_EOL; //我们需要发送短信的时候 $message = new SendSMSController(); $Order = new OrderController($message); echo '触发短信---'.$Order->send_msg().PHP_EOL; } } 结果触发邮件---send email 触发短信---send sms
2022年03月15日
67 阅读
2 评论
0 点赞
2022-03-15
xml转数组
代码function xmlToArray($xml) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $values; }
2022年03月15日
25 阅读
0 评论
0 点赞
2022-03-14
laravel-admin 报错 | Disk [admin] not configured, please add a disk config in `config/filesystems.php`.
config/filesystems.php 添加admin 文件上传配置 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ],最终效果'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), ], 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ], ],
2022年03月14日
40 阅读
0 评论
0 点赞
2022-03-14
PHP图片旋转
代码 /* * $filename 图片地址 * $src 替换地址 * $degrees 转换度数 */ private function flip($filename='',$src='',$degrees = 90) { if(!$filename || !file_exists($filename) || !$src || !file_exists($src)){ return false; } $data = @getimagesize($filename); if($data==false)return false; //读取旧图片 switch ($data[2]) { case 1: $src_f = imagecreatefromgif($filename);break; case 2: $src_f = imagecreatefromjpeg($filename);break; case 3: $src_f = imagecreatefrompng($filename);break; } if($src_f=="")return false; $rotate = @imagerotate($src_f, $degrees,0); if(!imagejpeg($rotate,$src,100))return false; @imagedestroy($rotate); return true; }
2022年03月14日
21 阅读
0 评论
0 点赞
1
2
3
4