PHP的基础知识

PHP

以下是我觉得学习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 代码,最好在文件末尾删除 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是否已经实现了相应扩展。如果有需求的话,还可以自己去写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之道实验楼

当前浏览器不支持博客完整功能。如果要获得最佳体验,请点击右上角···,复制链接,并在其它浏览器打开