原创

PHP的输出缓冲与header发送问题。

如果你在header或cookie函数前发送大量字符到浏览器,就会报headers already sent  错误,以下为说明:

headers_sent()

此函数告诉我们发送header的状态。如果将输出发送到浏览器,则不应使用重定向等header函数。为避免此类错误,我们可以使用headers_sent()函数检查header发送状态。它根据标头的状态返回TRUE或FALSE。当我们执行一个php脚本时,将输出存储到缓冲区中,然后再将其发送到浏览器。但是,这还取决于您的服务器php.ini设置,其中必须打开或关闭输出缓冲区。…

面向对象设计原则

4.2 面向对象设计7大原则
设计实现一个系统时,我们一般先按功能划分好模块,以模块中核心类为起点,根据功能逐步向周边延展设计其它类。
设计模式在这个过程中可以帮助我们进行高质量的代码设计。但是模式是有限的,这些优秀的设计模式背后有没有什么通用的指导原则呢?
依赖倒置原则:面向接口编程,不要针对实现编程。实现意味着应对变化的能力下降,尽量延迟到调用时再具体化。

开闭原则:对扩展开放,对修改关闭。比较好理解,扩展新增引入的风险相对修改更可控一些。修改往往意味着,系统扩展性不够。

里氏替换原则:继承父类的目的是为了复用。高质量的继承关系,是衍生类可以完全替换掉基类,并且系统的行为不受到影响。如果子类不能完全替换父类,说明继承是不彻底的,复用的目的就没有达到。

单一职责原则:一个类应该只承担一个职责。承担的职责过多,职责之间可能会相互耦合。这里最难的就是划分职责,职责必须恰如其分地表现实体的行为。比如用户账号可以修改基础信息,会员可以持有会员卡。如果不加以区分,只抽象一个用户实体包括所有的行为,显然是不合适的。

接口隔离原则:适度细化接口,接口的行为尽量少。分治的思想,降低复杂性,系统更可控。

迪米特法则:一个类对依赖的类知道的越少越好。本质目的是将复杂度控制在一定范围内。

组合/聚合复用原则:复用即可以通过继承实现,也可以通过组合 / 聚合实现。区别在于,继承表达 is-a的逻辑关联,目的在描述结构,而不是复用。

------
面向对象设计七大原则:“开闭原则”是总纲,告诉我们要“对扩展开放,对修改封闭”;“里氏替换原则”告诉我们“不要破坏继承体系”;“依赖倒置原则”告诉我们要“面向接口编程”;“单一职责原则”告诉我们实现类要“职责单一”;“接口隔离原则”告诉我们在设计接口时要“精简单一”;“迪米特法则”告诉我们要“降低耦合度”;“合成复用原则”告诉我们要“优先使用组合或者聚合关系复用,少用继承关系复用”
---------

开闭原则:对拓展开放,对修改关闭。
里氏替换原则:不该破坏类的继承体系,不应该复写父类的方法,子类可以拓展父类功能,但不能改变父类原有的功能。
依赖倒置原则:面向接口编程,而不是面向实现编程。
单一职责原则:尽量保持实现类的职责单一。
接口隔离原则:设计接口的时候要精简单一。
迪米特法则:降低耦合度,只和你的朋友交流。
合成复用原则:优先使用组合聚合关系,代替继承关系。

开闭原则实现途径:
里氏替换原则
依赖倒置原则

高内聚低耦合:
单一职责原则
接口隔离原则
迪米特法则
合成复用原则


面向对象编程时有以下几个选择:
1,多用组合,少用继承
2,针对接口编程,不针对实现编程
3,为交互对象之间的松耦合设计而努力
4,类应该对扩展开放,对修改关闭
5,依赖抽象,不要依赖具体类 ​


设计模式-六大原则、模式类型、规则

PHP的可调用类型(callable)总结

// 1 普通函数
call_user_func('my_function');
// 2类的静态方法
call_user_func(['MyClass', 'myCallbackMethod']);
// 3对象方法
call_user_func([new MyClass(), 'myCallbackMethod']);
//4类的静态方法(2)
call_user_func('MyClass::myCallbackMethod');
//5匿名函数
call_user_func(function(){echo '匿名函数';});
//6箭头函数
call_user_func(fn() =>print('箭头函数'));
 
//7相对关系
call_user_func(array('B', 'parent::who'));
// 8: Objects implementing __invoke can be used as callables
class C {
public function __invoke($name) 
    

connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)

nginx + php做服务,在高并发的时候会出现一些错误  connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)  。

目前有两种方法可以试试。

环境: ubuntu + nginx + php7.4

 

一、修改参数:

1、内核修改

sudo vim /etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 4096
sudo sysctl -p生效.

2、php-fpm配置修改

修改  /etc/php/7.4/fpm/pool.d/www.conf

listen.backlog = 4096
            

html table表格固定头部(thead)效果

<html lang="zh-CN" class=""><head>
     

    <meta charset="UTF-8">
    <title>CodePen Demo</title>
     
    <style>
  .table-container {
    width: 50%;
    height: 200px;
    border: solid 1px #cccccc;
    margin: 10px auto;
    background: #FFF;
    -webkit-transform: translate(-50%, -50%);
            transform: translate(-50%, -50%);
    position: absolute;
    top: 50%;
    left: 50%;
    padding-top: 50px;
    overflow: hidden;
  }
  
  
        

laravel万能路由( 自动路由、动态路由)实现方法分享

laravel万能路由 自动路由 动态路由

有了万能路由就不用一条一条添加路由了,很方便。如果你要用资源控制器做Restful接口,那还是要写资源路由的,注意,资源路由一定要写在最上面。

Route::resource('photos', 'PhotoController');//资源路由要写在上面。

//万能路由

Route::group(['middleware'=>['web']],function (){

    Route::any("/{module}/{controller}/{action}",function ($module,$class,$action){
        $class = "App\\Http\\Controllers\\$module\\".ucfirst(strtolower($class)).'Controller';
        if(class_exists($class))
        {
            $ctrl = \App::make($class);
                return \App::call([$ctrl, $action]);
        }
        return abort(404);
 
    })->where([ 'module'=>'[0-9a-zA-Z]+','class' => '[0-9a-zA-Z]+', 'action' => '[0-9a-zA-Z]+']);

});

在你的控制器方法中获取参数要用(Request $request)

public function index(Request $request)
    {
        
        

Web Components 是什么?它为什么对我们这么重要?

摘要

先看一看未来的 WebComponent 标准,再简单了解怎么写 WebComponents,最后说说它的重要性。

简介

这篇文章简单介绍 WebComponent 标准,介绍哪些浏览器已经开始支持 WebComponents,讨论 WebComponents 能解决什么问题,以及它对 web 开发的重要性。你可以了解到如何利用 Vanilla javascript 编写一个简单的 WebComponent,我还会针对它的潜在优势分享我自己的一些拙见。…

                

laravel的RESTful实现:RESTful资源控制器-通过laravel 学习RESTful

RESTful 资源控制器

资源控制器让你可以轻松地创建与资源相关的 RESTful 控制器.Laravel 的资源路由将典型的「CURD (增删改查)」路由分配给具有单行代码的控制器。例如,你希望创建一个控制器来处理保存 "照片" 应用的所有 HTTP 请求。使用 Artisan 命令 make:controller ,我们可以快速创建这样一个控制器:

php artisan make:controller PhotoController --resource