这篇文章主要介绍了PHP的基础语法和知识点,适合PHP新手和刚入门的web后台开发新手
以下是我觉得学习php中较重要的几个语法和知识点,下面逐个说明
什么是LAMP?
- Linux+Apache+Mysql+PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
- PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
1 2 3 4 5 6 7 8 9 10 11 12
| <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html>
|
- php的常用场景是作为web网站的后端语言,所以我觉得有必要了解一个浏览器的完整请求流程的步骤。参考链接
- 通过访问的域名去DNS服务器查找对应的IP
- 找到ip后,浏览器给web服务器发送一个HTTP请求。这里面还会涉及到浏览器重定向之类的,不在这详细赘述。
- 服务器处理请求(后台的工作重点,php,mysql,缓存等)
- 服务器返回一个html响应
- 浏览器接收数据,进行渲染,呈现页面
- 浏览器还会请求静态文件和发送异步(AJAX)请求
PHP的语法
php的标记<?php
和?>
,如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。
1 2 3 4 5 6 7
| <?php /*This is a multi line comment yet another line of comment*/ echo "Hello world"; //some code
|
1 2 3
| <p>This is going to be ignored by PHP and displayed by the browser.</p> <?php echo 'While this is going to be parsed.'; ?> <p>This will also be ignored by PHP and displayed by the browser.</p>
|
php支持8种原始数据类型,四种标量类型:boolean(布尔型)、integer(整型)、float(浮点型,也称作 double)、string(字符串),两种符合类型:array(数组)、object(对象),两种特殊类型:resource(资源)、NULL(无类型)。
php是弱类型语言,所以在变量赋值时无需指定类型,php语言会自动识别。查看变量的值和类型可以用var_dump();echo一般用来输出值,常用于输出字符串和数字。
1 2 3 4 5 6 7
| <?php $a_bool = TRUE; // a boolean $a_str = "foo"; // a string $a_str2 = 'foo'; // a string $an_int = 12; // an integer $a_array = array(); //an array $exception = new Exception(); //an object
|
php的数组,是一种key-value型的数组,key可以是integer或者string。value 可以是任意类型。
1 2 3 4 5 6 7 8 9 10 11 12 13
| $array = array('1' => 1, 2 => '2', 'array' => array(array('1'))); var_dump($array['1']); var_dump($array[2]); var_dump($array['array'][0][0]); echo count($array); //foreach($array as $k => $v) foreach($array as $row){ ... }
|
数据类型的转换,有自动转换和强制转换
1 2 3 4 5 6 7 8
| $foo = 5 + "10 Little Piggies"; echo $foo; $foo = 5 . "10 Little Piggies"; echo $foo; $foo = 1.3 + "0"; echo $foo; var_dump((int)$foo) ;
|
数组是php里经常使用的数据类型,所以基本的数组相关操作也要熟练,如遍历(key,value),排序,数组合并等。
‘==’号和‘===’号的差别在于,‘==’号会忽略2个值的类型,而‘===’除了值相等外还会比较2个值的类型。
1 2 3 4 5 6 7 8 9 10 11
| $a = 5; var_dump($a == '5'); //return true var_dump($a == 5); //return true var_dump($a === '5'); //return false var_dump($a === 5); //return true if(strpos('abcd', 'a')){ } if(strpos('abcd', 'a') !== false){ }
|
字符串的表示
- 单引号:不会对字符串里的特殊字符和变量进行解析
- 双引号:会对字符串里的特殊字符,如’\n’和’$name’进行解析。
- Nowdoc结构:和单引号功能一样,不过更加适合于表示多行的字符串,而不用用字符串连接符
- Heredoc结构:和双引号功能一样,不过更加适合于表示多行的字符串,而不用用字符串连接符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $single_quotes = 'this is a simple string'; $price = 6.5; $double_quotes = "the apple cost $price dollars. \n it's too expensive!" $str = <<<'EDO' this is a example of string using nowdoc sybtax EDO; $a = 'heredoc'; $str = <<<EDO this is a example of string using $a sybtax EDO;
|
类,函数,属性
和其他面向对象的函数一样,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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| //MY_Controller继承CI_Controller class MY_Controller extends CI_Controller { public $public_data;//公共属性 private $private_data;//私有属性 function __construct() { parent::__construct();//继承构造方法 } //公共方法 public function response($status) { $error_code = $this->config->item($status, 'status'); $return_data = array( 'msg' => $error_code['msg'], 'code' => $error_code['code'], ); return $return_data; } //私有方法,无法继承 private function func() { ... } } //Test类继承MY_Controller类 class Test extends MY_Controller { function __construct() { parent::__construct(); } //调用MY_Controller里的response($status)公共方法 function output() { echo json_encode($this->response('success')); } }
|
当然还有静态属性、方法,接口,抽象类等,具体戳:php面向对象编程
PHP中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。你需要知道他们的含义,了解其使用场合。具体的全局变量参数戳:参考链接
php的强大之一在于其拥有许多扩展,在你需要实现一个功能之前,首先查看php是否已经实现了相应扩展。如果有需求的话,还可以自己去写php的扩展,相关教程戳用C/C++扩展你的php
PHP 中的 mysql 扩展已经不再进行新的开发了,并且已经在 PHP 5.5.0 版本中正式被废弃,这意味着它将会在接下来的更新中被移除。所以现在推荐使用 mysqli 或 PDO 来取代 mysql 扩展
PDO示例:
1 2 3 4 5 6 7 8 9 10 11 12
| <?php // PDO + MySQL $pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password'); $statement = $pdo->query("SELECT some_field FROM some_table"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['some_field']); // PDO + SQLite $pdo = new PDO('sqlite:/path/db/foo.sqlite'); $statement = $pdo->query("SELECT some_field FROM some_table"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['some_field']);
|
1 2 3 4 5 6
| <?php $pdo = new PDO('sqlite:/path/db/users.db'); $stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id'); $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute();
|
上面这段代码在PDO 语句中使用了一个限制参数。这将对外部 ID 输入在发送给数据库之前进行转义来防止潜在的 SQL 注入攻击。具体戳:了解PDO
参考链接:php之道,实验楼
上一篇:solr新手指南
下一篇:YII框架学习——有关ActiveRecord的一些坑