专栏首页zhishengPHP 系列:PHP Web 开发基础

PHP 系列:PHP Web 开发基础

PHP是动态类型的Web开发的脚本语言,PHP以页面文件作为加载和运行的单元,PHP现在有了Composer作为开发包管理。

1.使用Composer管理依赖

自从.NET开发用了Nuget管理程序集依赖,我就再也离不开它了,幸亏Java中也有Maven管理jar包,虽然开源中国的镜像太慢但还有ibiblio的镜像可用,PHP现在终于有了Composer(参考1)用来管理资源包。

(1)全局安装(参考2)

在指定安装目录中执行命令行:

php -r "readfile('https://getcomposer.org/installer');" | php

在指定安装目录中执行命令行:

echo @php "%~dp0composer.phar" %*>composer.bat

将指定安装目录添加到环境变量的系统变量Path中。

(2)项目安装

在项目目录中执行命令行:

php -r "readfile('https://getcomposer.org/installer');" | php

使用 composer.json 文件配置依赖。如配置PHP中常用的日志组件:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }}

使用命令行命令 php composer.phar install 安装依赖的资源包。如果进行了全局安装,只需要执行composert install。

这会将生成 composer.lock 文件并依赖下载资源包到 vendor 目录,composer.lock 文件是下载依赖时真正使用的文件。

(3)升级依赖

项目使用 composer.lock 文件维护依赖,如果我们需要使用更新版本的依赖,需要按需修改 composer.json 文件并执行更新命令。全局安装:composer update,项目安装使用:php composer.phar update。

(4)资源包查询与镜像

可以使用http://packagist.org检索资源包,好比.NET中的https://www.nuget.org/packages/和Java中的http://search.maven.org/。

可以使用http://packagist.phpcomposer.com镜像,全局配置使用如下命令行命令:

composer config -g repo.packagist composer http://packagist.phpcomposer.com

项目配置使用如下命令行:

composer config repo.packagist composer http://packagist.phpcomposer.com

当然最简单的方式是直接修改composer.config文件:

{
    "require": {
        "monolog/monolog": "1.0.*"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "http://packagist.phpcomposer.com"
        }
    }}

(5)自动加载

Composert 在 vendor 目录下自动生成并维护包含了全部依赖信息的 autoload.php 文件。因此我们只需要通过 autoload.php 使用第三方库即可。例如:

<?php 
require 'vendor/autoload.php';$log = new Monolog\Logger('name');$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));$log->addWarning('Foo');?>

2.PHP基础

(1)PHP类似C语系语法的脚本语言。

如果你有C或C++语言的基础,那么很多概念和语法都可以直接对照。从大小写敏感到注释,从数据类型、函数、参数传递和成员引用等。从C/C++/Java/C#这一体系学习下来,再加上JavaScript脚本语言的基础,加点PHP的技能点水到渠成。

(2)PHP是动态类型语言。

PHP有和C语言等强类型语言一样的数据类型定义,支持的类型也相仿,只是PHP中同一变量在不同时刻可以表示不同类型的数据,但同一时刻,每个变量都相当于强类型中的指定类型的变量。因此对于PHP,更适合的称呼是动态类型。习惯使用Java/C#等强类型语言总会对动态类型的脚本语言心存焦虑,可以通过PHP的类型检查函数减少这方面的顾虑(is_bool\is_integer\is_double\is_string\is_null等)。

(3)PHP以页面文件方式运行。

无论如何使用PHP,PHP的都是以页面文件方式运行的,这和运行在浏览器端的JavaScript方式类似,JavaScript文件只有在被加载到当前页面才能引用和执行,PHP也只有在通过include或required方式加载后才能引用和执行,即使后续添加的 __autoload和spl_autoload依然只是简化而非改变了其加载引用的本质。

(4)PHP不需要复杂的框架

PHP天生是处理Web请求的,HTTP协议相关的内容是PHP的重点,一般来讲,除了纵向请求的处理,横向的认证和授权控制部分,其他部分不应该过于依赖PHP,如果通过耦合性较高的Web框架使用PHP本身就是错误的。由于PHP本身的运行和加载方式,导致PHP天生就适合复用各种组件而非使用框架来解决问题。成天寄希望于框架的人,要么是不想在PHP基础要么是不想在业务逻辑基础上下功夫。

3.PHP常用文件

(1)配置文件config.php

应用配置的各种信息定义在一个或多个配置文件中。一般每次请求都会加载配置文件,配置文件中不只包含了数据库连接信息,如应用MVC时,每次请求都会加载配置文件以便读取所有URL和Controller以及View之间的规则。

(2)入口文件index.php

处理首页请求或全部请求的文件。index.php在实现PHP的MVC时是天然的前段控制器FrontController,由index.php负责纵向的处理请求转发,横向的认证和授权等处理文件,等也需要在index.php中加载。

(3)数据访问文件database.php

database.php是工具类中最主要的用于数据访问的文件,为了避免数据访问中重复性出现的代码,一般的PHP应用程序都会独立的一个或一组数据访问文件。

4.自定义Session

在PHP中自定义Session比Java中方便多了,只需要将自定义的函数名称做为参数传递给session_set_save_handler($open, $close, $read, $write, $destroy, $gc)作为参数即可,我们自定义一个使用cookie作为存储的session,作为演示没有对数据长度进行验证,也没有使用对称加密解密。

<?phpfunction open_session() {
    return true;}function close_session() {
    return true;}function read_session($id) {
    if ($_COOKIE[$id]) {
        return base64_decode($_COOKIE[$id]);
    }
    return '';}function write_session($sid, $data) {
    if ($_COOKIE['session_end']) {
        setcookie($sid, base64_encode($data), $_COOKIE['session_end']);
    } else {
        $start = time() + session_get_cookie_params()['lifetime'];
        setcookie('session_end', $start, $start);
        setcookie($sid, base64_encode($data), $start);
    }
    return true;}function destroy_session() {
    $_Session = array();
    return true;}function gc_session() {
    return true;}ini_set("session.cookie_lifetime", "3600");session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'gc_session');session_start();$_SESSION['count'] += 1;echo $_SESSION['count'];session_write_close();?>

参考

(1)https://getcomposer.org/doc/00-intro.md

(2)http://docs.phpcomposer.com/00-intro.html

本文分享自微信公众号 - zhisheng(zhisheng_blog)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 生产环境 Kafka 消费速度巨慢该咋办?

    接口调用就需要执行任务不能阻塞, 不然系统的处理能力就会下降。任务调度系统需要在在一个最小的检测粒度时间内,执行完所有任务。这两种情况都面临这样一个问题, 任务...

    zhisheng
  • Java研发方向如何准备BAT技术面试

    背景: 最近BAT等各大互联网巨头们的校招陆陆续续都准备开始了,可能对于在校的大多数学生来说,不知道如何正确衡量自己掌握的技术,更不知道BAT这...

    zhisheng
  • Flink 执行引擎:流批一体的融合之路

    摘要:本文由 Apache Flink Committer 马国维分享,主要介绍 Flink 作为大数据计算引擎的流批一体融合之路。内容包括:

    zhisheng
  • PHP代码审计

    1.概述 代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给...

    wangxl
  • 深入PHP内核(二)——SAPI探究

    SAPI是Server Application Programming Interface(服务器应用编程接口)的缩写。PHP通过SAPI提供了一组接口,供应用...

    后端技术探索
  • 高级PHP工程师所应该具备一些技能

    初次接触PHP,就为其美所折服,于是一发不可收拾。 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说...

    wangxl
  • 一个高级PHP工程师所应该具备的

    初次接触PHP,就为其美所折服,于是一发不可收拾。 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简...

    wangxl
  • php 5.6 已死,关于 php 7 你必须知道的几件事

    一般手机系统升级我是跑最后的,因为不愿意踩坑,毕竟iOS和Android这种系统都会出现bug,何况世界上被人黑的最多的语言。

    猿哥
  • 一个中高级PHP工程师所应该具备的能力

    很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望给初级或已经达...

    wangxl
  • PHP没前途?

    PHP是不是已经走到了尽头?这是近年来的一个热门话题,毕竟有很多互联网企业都在尝试推出其他开发语言,并且吸引了相当多的关注。例如Go以协程著称,Java则有着最...

    用户1408045

扫码关注云+社区

领取腾讯云代金券