开始学习 Modern PHP 一书,看到豆瓣的评分还是不错的,也有人推荐


Zend EnginePHP 引擎,另外还有 facebookHipHop Virtual Machine

Hack 是建立在 PHP 上的编程语言,引入了静态类型,新的数据皆结构和额外的借口,同时向后兼容现有的动态类型 PHP 代码


书本开始讲的是 namespace

我们首先需要安装 composer,这个熟悉前端的话知道它是类似于 node.jsnpm

所以到了他的 官网下载

这个时候想要全局安装 composer,我使用的是 mac 有默认安装的 PHP ,但是我自己使用的是 xampp,所以参考了下这篇文章 修改 MAC 默认 PHP 运行环境,给 XAMPP 配置全局 COMPOSER

我们之后就可以在任意地方使用 PHP 的包管理器 composer

可以看上面官网如果使用 composer 也可以到 中文网


因为万恶的墙,后面的依赖下载都做不到,找不到了 国内镜像地址 替换


一开始练习就涉及到了引入 Symfony

Symfony is a PHP full-stack web framework. It is written with speed and flexibility in mind. It allows developers to build better and easy to maintain websites with PHP.
  
Symfony can be used to develop all kind of websites, from your personal blog to high traffic ones like Dailymotion or Yahoo! Answers.

我是看着官网的 How to Install and Use the Symfony Components 进行的

composer require symfony/finder
composer require symfony/http-foundation

下载完这两个,我们就可以引入了,composer 在目录下会生成一个 vendor 文件夹。我们在自己的文件顶部写入下面这句可以自动加载

require 'vendor/autoload.php';

  use Symfony\Component\HttpFoundation\Response as Response;
  use Symfony\Component\HttpFoundation\Request;
  use Symfony\Component\HttpFoundation\Cookie;

然后使用 use 引入我们需要的类就可以了。

注意,上面引入的最前面都不需要加上 \,全局命名空间才需要,如果 Exception,我们使用的话是 \Exception,但是比如我们自己有一个

`namespace My\App;`

使用的时候是

`use My\App;`

如果使用

`use \My\App;`
  
\Exception

会搜索 \My\App\Exception 但是不存在


一个文件里面不要写多个命名空间


example

1.php

<?php 
  require 'vendor/autoload.php';

  use Symfony\Component\HttpFoundation\Response as Response;
  use Symfony\Component\HttpFoundation\Request;
  use Symfony\Component\HttpFoundation\Cookie;

  $response = new Response('Oops', 400);
  $response->send();
?>


2.php

<?php 
  namespace Cody\App;
  class Foo {
    public function doSomething(){
      // \Exception 是全局类,加上\
      $exception = new \Exception();
      echo 'success';
      echo $exception;
    }
  }

3.php

<?php 
  require 'vendor/autoload.php';
  // 要引入 2.php
  require '2.php';

  use Cody\App\Foo;

  $foo = new Foo();
  
  // 调用函数使用箭头
  $foo->doSomething()
?>