php入门

php入门

php是什么

PHP(Hypertext Preprocessor)是一种创建动态交互性站点的强有力的服务器端开源脚本语言。

php特点

  1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
  2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,
    PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;
    PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。
  3. PHP支持几乎所有流行的数据库以及操作系统。
  4. 最重要的是PHP可以用C、C++进行程序的扩展!

php优势

  1. 开放源代码
    所有的PHP源代码事实上都可以得到。

  2. 免费性
    和其它技术相比,PHP本身免费且是开源代码。

  3. 快捷性
    程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言。编辑简单,实用性强,更适合初学者。

  4. 跨平台性强
    由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS、Mac OS、Android等平台。

  5. 效率高
    PHP消耗相当少的系统资源。

  6. 图像处理
    用PHP动态创建图像,PHP图像处理默认使用GD2。且也可以配置为使用image magick进行图像处理。

  7. 面向对象
    在php4,php5 中,面向对象方面都有了很大的改进,php完全可以用来开发大型商业程序。

  8. 专业专注
    PHP支持脚本语言为主,同为类C语言。

开发工具

集成开发环境是一种集成了软件开发过程中所需主要工具的集成开发环境,其功能包括但不仅限于代码高亮、代码补全、调试、构建、版本控制等。一些常见的PHP IDEs如下:

  • Zend Studio:商业版,Zend官方出品,基于eclipse
  • Eclipse with PDT:免费
  • PHP Storm:商业版

php安装

使用php进行web系统开发,需要:

  • 安装 Web 服务器
  • 安装 PHP
  • 安装数据库,比如 MySQL

官方 PHP 网站(PHP.net)有 PHP 的安装说明: http://php.net/manual/zh/install.php

php依赖管理

对于现代语言而言,包管理器基本上是标配。Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm。而Composer,是PHP依赖管理的利器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1、安装Composer:
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

2、声明依赖:
在项目目录下创建一个 composer.json 文件,指明依赖,比如,你的项目依赖 monolog:
{
"require": {
"monolog/monolog": "1.2.*"
}
}

3、安装依赖:
composer install

4、自动加载:
Composer 提供了自动加载的特性,只需在你的代码的初始化部分中加入下面一行:
require 'vendor/autoload.php';

php插件安装

Linux系统中,PHP安装成功后,在bin目录下会生成一个名叫phpize的可执行脚本,这个脚本的用途是动态安装php扩展模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
注:以PHP安装mysql.so扩展为例

1、进入php源码的ext/mysql目录
cd /usr/local/src/php/ext/mysql/

2、运行phpize,在该目录下生成一个configure文件(php安装目录:/usr/local/php/)
/usr/local/php/bin/phpize

3、运行configure,指明php-config文件位置(/usr/local/php/bin/php-config)和mysql安装目录(/usr/local/mysql/)
./configure --with-php-config=/usr/local/php/bin/php-config --with-mysql=/usr/local/mysql/

4、编译安装,生成mysql.so
make && make install

5、修改php.ini文件,添加mysql.so扩展配置,保存退出
extension=mysql.so

6、重启php-fpm
service php-fpm restart

php基础语法

  • 基础php语法:

PHP 脚本可放置于文档中的任何位置。
PHP 脚本以 <?php 开头,以 ?> 结尾

1
2
3
<?php
// 此处是 PHP 代码
?>
  • php中的注释:
1
2
3
4
5
6
7
8
9
// 这是单行注释

# 这也是单行注释

/*
...
多行注释块
...
*/
  • php大小写敏感

在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。
不过在 PHP 中,所有变量都对大小写敏感。

  • php变量

PHP 是一门类型松散的语言,PHP根据它的值,自动把变量转换为正确的数据类型。

1
2
3
4
5
6
PHP 变量规则:
变量以 $ 符号开头,其后是变量的名称
变量名称必须以字母或下划线开头
变量名称不能以数字开头
变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
  • php数据类型

字符串、整数、浮点数、逻辑、数组、对象、NULL。

  • php字符串函数
1
2
3
4
5
6
7
8
9
10
11
strlen() //返回字符串的长度
strpos() //用于检索字符串内指定的字符或文本
explode() //把字符串打散为数组
implode() //返回由数组元素组合成的字符串
md5() //计算字符串的 MD5 散列
str_replace() // 替换字符串中的一些字符
str_split() //把字符串分割到数组中
strcmp() // 比较两个字符串(对大小写敏感)
strstr() //查找字符串在另一字符串中的第一次出现(对大小写敏感)
trim() // 移除字符串两侧的空白字符和其他字符
...
  • php常量

常量是单个值的标识符(名称)。在脚本中无法改变该值。
有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。

1
2
3
4
<?php
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
?>
  • php运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
算术运算符:
+ - * / %

赋值运算符:
= += -= *= /= %

字符串运算符:
. .=

递增/递减运算符:
++$x $x++ --$x $x--

比较运算符:
== === != <> !== > < >= <=

逻辑运算符:
and or xor && || !
  • php条件语句

在您编写代码时,经常会希望为不同的决定执行不同的动作。您可以在代码中使用条件语句来实现这一点。
在 PHP 中,我们可以使用以下条件语句:

1
2
3
4
if 语句 - 如果指定条件为真,则执行代码
if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
if...elseif....else 语句 - 选择若干段代码块之一来执行
switch 语句 - 语句多个代码块之一来执行
  • php循环语句

在您编写代码时,经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务,而不是在脚本中添加若干几乎相等的代码行。

1
2
3
4
5
6
7
while - 只要指定条件为真,则循环代码块

do...while - 先执行一次代码块,然后只要指定条件为真则重复循环

for - 循环代码块指定次数

foreach - 遍历数组中的每个元素并循环代码块
  • php函数

除了内建的 PHP 函数,我们可以创建我们自己的函数。
用户定义的函数声明以”function” 开头,可以通过参数向函数传递信息。
参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。

1
2
3
4
function sum($x,$y) {
$z=$x+$y;
return $z;
}
  • php数组

数组能够在单独的变量名中存储一个或多个值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//普通数组
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);

for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "<br>";
}

//关联数组
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");

foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
  • php超级全局变量

PHP中预定义了几个超级全局变量(superglobals),这意味着它们在一个脚本的全部作用域中都可用。你不需要特别说明,就可以在函数及类中使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$GLOBALS //$GLOBALS 是PHP的一个超级全局变量组,包含了全部变量的全局组合数组。变量的名字就是数组的键

$_SERVER //$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组

$_REQUEST //$_REQUEST 用于收集HTML表单提交的数据

$_POST //$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"

$_GET //$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"

$_FILES //通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件

$_ENV //通过环境方式传递给当前脚本的变量的数组

$_COOKIE //$_COOKIE 变量用于取回 cookie 的值

$_SESSION //存储和取回 session 变量
  • php魔术变量

PHP 向它运行的任何脚本提供了大量的预定义常量。魔术常量它们的值随着它们在代码中的位置改变而改变。

1
2
3
4
5
6
7
__LINE__ //文件中的当前行号。
__FILE__ //文件的完整路径和文件名
__DIR__ //文件所在的目录
__FUNCTION__ //函数名称
__CLASS__ //函数名称
__METHOD__ //类的方法名
__NAMESPACE__ //当前命名空间的名称
  • php命名空间

PHP 命名空间可以解决以下两类问题:
1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

1
2
3
4
<?php  
namespace MyProject1;
// MyProject1 命名空间中的PHP代码
?>
  • php面向对象

面向对象关键知识点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
类:定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。

对象:是类的实例。

成员变量:定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。

成员函数:定义在类的内部,可用于访问对象的数据。

继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

父类:一个类被其他类继承,可将该类称为父类,或基类,或超类。

子类:一个类继承其他类称为子类,也可称为派生类。

多态:多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载:简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

抽象性:抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

封装:封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

构造函数:主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

析构函数:析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
public(公有):公有的类成员可以在任何地方被访问。
protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
private(私有):私有的类成员则只能被其定义所在的类访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php 
class Site {
/* 成员变量 */
var $url;
var $title;

/* 成员函数 */
function setUrl($par){
$this->url = $par;
}

function getUrl(){
echo $this->url . PHP_EOL;
}

function setTitle($par){
$this->title = $par;
}

function getTitle(){
echo $this->title . PHP_EOL;
}
}

$google = new Site;
$google->setTitle( "Google 搜索" );
$google->setUrl( 'www.google.com' );
$google->getTitle();
$google->getUrl();
?>

php入门实践

1
2
3
4
使用LNMP(linux+nginx+mysql+php)完成demo的开发。
1、使用CodeIgniter框架进行开发;
2、操作mysql数据库;
3、使用nginx作为web服务器;

相关学习资料

php官网
PHP入门教程
PHPChina开发者社区
PHP Composer:PHP依赖管理工具
Laravel官网:最流行的PHP开发框架
ThinkPHP:中文最佳实践PHP开源框架
CodeIgniter:一个小巧但功能强大的PHP框架
Yii:基于组件,用于开发大型Web应用的高性能PHP框架
Swoole:php的异步、并行、高性能网络通信引擎
Workerman:一款纯PHP开发的开源的PHP socket服务器框架

Thank you for your support!