Matthew Note

PHP Note

composer

一个php的包管理的,很近似于npm, 他也是默认不全局的,只是配置某个工程,然后通过json文件自动下载依赖

composer.lock

是个特殊的文件,记录了创建时各个package的版本,这样下次install的时候保证版本严格一致

autoload

这个脚本会自动load相应依赖,所以在工程中只要require了这个,那么这些package可以直接拿来使用

require可以返回一个instance,可以后期add package

1
2
$loader = require __DIR__ . '/vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

You can even add your own code to the autoloader by adding an autoload field to composer.json.

1
2
3
4
5
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}

create a library

As soon as you have a composer.json in a directory, that directory is a package. When you add a require to a project, you are making a package that depends on other packages. The only difference between your project and libraries is that your project is a package without a name.

Tip

  • 函数内的变量是不受{}scope控制的。类似于js
  • PHP接受显式的函数参数类型指派,我比较倾向于显示的指出
  • php namespace是在一个作用域里,如果在另外的引用文件里已经包含了对应的引用文件,本文件中不用再引用一次
  • mysql connection不用主动释放,执行结束会自动释放
  • pfsockopen 可以打开一个持久的sock connection

set_include_path & get_include_path

set_include_path用于限定include或者require文件的范围,并且使得代码里不必要写一个完整的路径,如果不调用这个方法,那么你可以以相对或者绝对路径的方式访问任何地方,但是如果有了这个只能在他限定的范围内查找

Magic Func

  • __call() 访问类中不存在的对象会调到
  • invoke() 以类名执行类似python的call__
  • get(), set()

Magic func doc

Reflection


  • get_class_name()
  • get_class_method()

Reference

How to Make Async Requests in PHP