PHP

最新PHP中的const和define 定义常量的区别

最新PHP中的const和define 定义常量的区别
常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量大小写敏感(php 7.4*)。通常常量标识符总是大写的。
1. const 通常用于类成员变量的定义。define不可用于类成员变量的定义,可用于全局常量。
2. const是在编译时定义, 不能在函数,循环及if条件中使用; 函数define() 定义的常量是在执行define()函数时定义的,因此可以在函数内、循环内、if语句内等函数能够被调用的任何地方使用define()函数定义常量。
<?php
const FOO='BAR';//有效的valid
define('FOO', 'BAR');// 有效的valid
if (1) {
const FOO='BAR';//无效的invalid
}
if (1) {
define('FOO', 'BAR');// 有效的valid
}

 

 3 .const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感(php7.4被弃用)。
例如:
<?php
define('FOO', 'BAR', true); //不区分大小写的常量的声明已从php7.4被弃用。现在将其TRUE作为第三个参数传递 
    

PHP实现简单RPC

1.什么是rpc

RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。

2.从通信协议的层面

基于HTTP协议的(例如基于文本的SOAP(XML)、Rest(JSON),基于二进制Hessian(Binary))
基于TCP协议的(通常会借助Mina、Netty等高性能网络框架)

3.从不同的开发语言和平台层面

单种语言或平台特定支持的通信技术(例如Java平台的RMI、.NET平台Remoting)
支持跨平台通信的技术(例如HTTP Rest、Thrift等)

4.从调用过程来看

同步通信调用(同步RPC)
异步通信调用(MQ、异步RPC)

5.常见的几种通信方式

远程数据共享(例如:共享远程文件,共享数据库等实现不同系统通信)
消息队列
RPC(远程过程调用)

6.php实现简单的rpc

目录结构

image.png

rpc服务端

<?php
/**
 * User: yuzhao
 * CreateTime: 2018/11/15 下午11:46
 * Description: Rpc服务端
 */
class RpcServer {
    

模仿laravel,使用反射来实现自动依赖注入

在看laravel源码的时候,在Container.php中有个build的方法,主要就是用了反射来进行实例化
参照它的写法,自己写了一个小例子
这里写的比较简单,就是一个依赖参数,正常应该普通参数也要放进去
类似在person类里的weight,address
public function __construct(Bag bag,weight, $address){}

 

<?php
/*
 * 目的:通过反射,自动找依赖注入的类。
 * 在实例的时候,里面的$bag, $book自动去查找,并且实例化
 * */

class Book{
    public function name(){
        return '语文书';
    }
}

class Bag{
    public $book;
        

2020年的PHP

在Web开发人员和程序员之间,这并不是什么秘密:PHP的声誉不高。尽管它仍然是构建Web应用程序的最常用语言之一;多年以来,PHP赢得了混乱的代码库,经验不足的开发人员,不安全的代码,不一致的核心库等的美誉。

尽管许多反对PHP的论据仍然存在,但还有一个光明的一面:您可以用PHP编写干净,可维护,快速和可靠的应用程序。

在这篇文章中,我想看看PHP开发的光明面。我想向您展示,尽管有很多缺点,PHP是一种值得学习的语言。我想让您知道PHP 5时代即将结束。那就是,如果您愿意的话,您可以编写现代而干净的PHP代码,并抛弃10年前的混乱局面。

因此,让我们看一下过去几年中语言是如何变化,甚至成熟的。我想请您搁置几分钟的偏见,而今天的PHP可能会让您感到惊讶。…

    

异步PHP

这里有一个新的程序包,它称为spatie/async,旨在在PHP中进行异步并行处理。

对于许多Web开发人员而言,PHP中的并行处理似乎是一个边缘案例,但让我们看一下Spatie上的一些用例:

我们想创建一个易于使用的程序包,但是它可以解决我们的用例。上面列出的有些示例将不使用新spatie/async软件包,因为Laravel还提供了一个队列系统。

这就是我们程序包中的异步代码的样子。

use Spatie\Async\Process;

$pool = Pool::create();

foreach (range(1, 5) as $i) {
    $pool[] = async(function () use ($i) {
        
    

Nginx Unit 初探及其性能对比分析

1. Nginx Unit 初探

Nginx Unit 是一个开源的,以 Nginx 为基础、支持多语言的 Web 服务器,它支持 Python,PHP,Go 等多语言应用程序,可以在不中断服务的情况下完成部署配置更改,以多种语言运行代码。而它运行多种语言的能力是基于内部路由器进程之间的隔离,路由器进程可终止传入的 HTTP 请求,以及应用程序进程的分组,路由器进程是持久的,不重新启动。

它具有以下特征:

使用 RESTful JSON API 进行动态重配置服务器;

同时支持多语言,多版本应用;

即将支持的特性有:

动态语言的进程管理功能;

TLS 支持;

TCP,HTTP,HTTPS,HTTP/2 路由和代理。…

                

PHP中闭包Closure::bind详解

最近在看laravel底层代码时 ,发现代码中很多Closure::bind用法,查询各种资料,一直对它的使用一直半解(网上大多都是抄袭教材,解释的不清楚),还好经过我不懈努力,终于弄懂了其中道理。
1、在正式解释前我们先了解一些基础的东西(稍安勿躁,磨刀不误砍柴工。大多说看不懂其用法的人,主要还是基础不牢)。php中 闭包我们也可以叫做匿名函数,匿名函数不了解的可以自行补一下,我这边简单举例: