闭包
闭包其实是一个函数的实例,该实例是一个存在于内存中的某个结构体。
也就是说闭包不是静态的代码,它是在函数运行时产生的一个函数及其运行时创建的环境的综合体。
闭包其实是一个函数的实例,该实例是一个存在于内存中的某个结构体。
也就是说闭包不是静态的代码,它是在函数运行时产生的一个函数及其运行时创建的环境的综合体。
通俗的说,就是各个类有完全相同的方法,我们把这些方法都抽出来写到一个trait中,然后分别在这些类里用use引入这个trait,以达到复用代码,精简代码的目的。
本质区别:一个类可同时继承多个接口类,但只能继承一个抽象类。
除了本质区别外,抽象类完全可以代替接口(把所有的方法写成抽象方法即可)。
Tools→Deployment→configuration,Tools→Deployment→Upload to xxx
– `self` 我在哪个类中,我就代表谁,由于`self`是在父类,所以即使是子类调用的它,但它还是代表父类,用它去获取到的类名自然也是父类的类名,用它去调用的方法自然也是父类的方法(即使子类有同名方法也会调用父类的);
– `static` 哪个类(或对象)调用我,我就代表那个类(或那个对象所属的类),因为是子类(Driver)调用的它,所以它就代表子类,用它去获取到的类名自然也是子类名,用它去调用方法,调用的也是子类的方法(即使父类有同名函数),当然由于子类方法本来就会覆盖父类,所以这个特性倒是没什么;
PHP分片上传文件到又拍云对象存储
– 本地网站debug
– 局域网远程(多人)debug
– 外网远程debug(单人)
– 命令行方式执行php时debug
– 正常情况下,右击attach进来的项目,会有个叫“Remove From Project View”的按钮,点它即可关闭;
– 非正常情况,上述的按钮不出现,方法:进入被attach的项目文件夹,找到”.idea/modules.xml”文件,打开文件,删除里面的一个module项即可。
1、编写composer.json文件,一个包是不是composer包,主要看是否有composer.json文件
2、上传到github
3、提交到Packagist(通过指定github地址的方式)
4、设置github自动更新到Packagist中(通过添加Webhook,即勾子)
/**
* 用注释的方式声明变量,注释的第一个斜杠后面必须要两个“*”号,
* 以“@var”开头,中间是变量类型,最后是变量名(带“$”符),当然变量类型可不写
* @var string $aa
*/
$test = ‘aa’;
$$test = “I’m aa”;
echo $aa;
Phpstorm直接执行php文件(不通过网页),主要用于调试一些“纯程序”的,无html的php代码(比如写一个排序算法)。
获取不到的原因,是因为使用了代理服务器,比如常见的用nginx作为反代服务器,后面有多台服务器提供服务器,反代服务器作为负载均衡服务器,这种情况一般要用$_SERVER[‘HTTP_X_FORWARDED_FOR’]来获取客户端的地址。
原生php可以通过$_SERVER[‘HTTP_X_REQUESTED_WITH’]的值是否等于XMLHttpRequest来判断,但基本上PHP框架都会有封装好的方法,当然其原理也是通过判断$_SERVER[‘HTTP_X_REQUESTED_WITH’]
fastcgi_params versus fastcgi.conf – nginx config history
大部分人可能都觉得`time()`与`$_SERVER[‘REQUEST_TIME’]`获取的时间都是一样的,其实在绝大部分情况下这两个值确实是一样的,但是有时候会有不同的值。