PHP 基础笔记

WBOY
WBOYOriginal
2016-06-23 13:14:371205browse

数据类型

  • 字符串
  • 整数
  • 浮点数
  • 布尔值
  • 数组
  • 对象
  • NULL
  • 未定义的变量,数据类型为 NULL。

    PHP 中数组和对象是不同的类型,而 js 中数组即为对象。(ps: es6 已经内置了 class)

    运算符

    字符串拼接用 . (点运算符),而不是 +。所以 PHP 里两个字符串数字能用 + 连接,会自动转为数字相加。

    $a = "100";$b = "200";$c = $a + $b;echo $a + $b; // 300
    循环语句

    foreach 循环只适用于 数组,并用于遍历数组中的每个键/值对。

    $a = array("red", "green", "blue", array(1, 2, 3)); foreach ($a as $i) {  var_dump($i);}// string 'red' (length=3)// string 'green' (length=5)// string 'blue' (length=4)// array//   0 => int 1//   1 => int 2//   2 => int 3
    双引号和单引号

    js 中双引号和单引号用法基本相同。

    php 里的单引号把内容当成纯文本,不会经过服务器翻译。而双引号则与此相反,里面的内容会经过服务器处理(process),然后再当作 HTML 代码输出。

    $a = 10;echo "the value of a is $a";  // the value of a is 10echo 'the value of a is $a';  // the value of a is $a

    在写数据库查询语句时非常好用。

    原来要这样:

    $date = '2016-03-01';$sql = 'select * from adblock where day >= ' . '"' . $date . '"' . ' order by day';

    实际只需这样:

    $date = '2016-03-01';$sql = "select * from adblock where day >= $date order by day";

    能用单引号就用单引号(效率高),避免双重求值(有点类似 js 中的 eval() ,以及 setTimeout 回调不传字符串等)。

    函数传参

    js 的函数是按值传递(详见 这里),基本类型传入函数是不会改变原始值的,而对象(包括数组)参数传入时要格外小心,一不注意就可能把原始的值改掉了。

    PHP 支持按值传递以及按引用传递,区别就是函数参数中的一个 & 地址符号,这点和 C 语言相似。

    按值(原始值不变):

    function fn($a) {  $a[0] = 10;}$a = array(1, 2, 3);fn($a);var_dump($a);// array// 0 => int 1// 1 => int 2// 2 => int 3

    按引用(改变原始值):

    function fn(&$a) {  $a[0] = 10;}$a = array(1, 2, 3);fn($a);var_dump($a);// array// 0 => int 10// 1 => int 2// 2 => int 3
    变量作用域

    js 中变量的作用域是函数为单位,并没有区块级的作用域。(PS:es6 let 关键字实现了区块级作用域)。

    PHP 有三种不同的变量作用域:

  • local(局部)
  • global(全局)
  • static(静态)
  • 函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。(这点和 js 不同,js 函数内能访问函数之外的变量)

    函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。(这点和 js 类似)

    PHP 函数外的变量只能在函数外访问,函数内的变量只能在函数内访问。可以用 global 关键字(或者 $GLOBALS[])打通内外界限。

    函数内访问外部变量:

    $a = 10;function fn() {  global $a;  echo $a;  // 10}fn();

    或者:

    $a = 10;function fn() {  echo $GLOBALS['a']; // 10}fn();

    函数外访问内部变量(其实是在函数内申明全局变量):

    function fn() {  global $a;  $a = 20;}fn();echo $a;  // 20

    或者:

    function fn() {  $GLOBALS['a'] = 20;}fn();echo $a;  // 20
    类型转换

    PHP 中也可以对变量做强制转换,这点和 C 语言相似。在要转换的变量之前加上目标类型,目标类型用括号括起来。

    PHP 中允许的强制类型转换有:

  • (int),(integer) —— 转换成整型
  • (bool),(boolean) —— 转换成 bool 型
  • (float),(double),(real) —— 转换成浮点型
  • (string) —— 转换成字符串
  • (array) —— 转换成数组
  • (object) —— 转换成对象
  • 或者直接用 settype 函数,简单粗暴。(参考下节)

    类型判断

    判断变量的类型:

  • is_integer()
  • is_string()
  • is_double()
  • is_array()
  • is_null()
  • is_object()
  • is_int()
  • is_numeric()
  • 取得变量的类型:

  • gettype()
  • 设置变量类型:

  • settype()

    $a = 10;settype($a, "string");var_dump($a); // string '10' (length=2)
  • 另外,var_dump() 也会返回变量的 数据类型 和值。

    基本调试

    用 echo()(能够输出一个以上的字符串) 或者 var_dump() 打印变量。如果是直接在浏览器打开 php 文件,打印结果会出现在页面;如果是 http 请求,打印结果会在 http 响应中(f12 查看)。

    习惯 js 调试在控制台输出风格的,可以尝试 chrome-logger

    其他
  • isset() 判断变量是否已经定义
  • unset() 删除一个或者多个变量
  • Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn