数据类型

  • 字符串
  • 整数
  • 浮点数
  • 布尔值
  • 数组
  • 对象
  • 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 10
echo '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() 删除一个或者多个变量

PHP 基础笔记的更多相关文章

  1. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  2. php代码审计基础笔记

    出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...

  3. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  4. MYSQL基础笔记(五)- 练习作业:站点统计练习

    作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...

  5. MYSQL基础笔记(四)-数据基本操作

    数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...

  6. MYSQL基础笔记(三)-表操作基础

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

  7. MYSQL基础笔记(二)-SQL基本操作

    SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...

  8. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  9. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

  10. JavaScript基础笔记一

    一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...

随机推荐

  1. android 8种对话框(Dialog)使用方法汇总

    1.写在前面 Android提供了丰富的Dialog函数,本文介绍最常用的8种对话框的使用方法,包括普通(包含提示消息和按钮).列表.单选.多选.等待.进度条.编辑.自定义等多种形式,将在第2部分介绍 ...

  2. Bootstrap弹出框(modal)垂直居中

    最近在做一个eit项目,由于此项目里面一些框架要遵循nttdata的一些规则,故用到了Bootstrap这个东东,第一次碰到这个东东,有很大抵触,觉得不好,但用起来我觉得和别的弹出框真没什么两样.废话 ...

  3. 玩转Windows Azure存储服务——高级存储

    在上一篇我们把Windows Azure的存储服务用作网盘,本篇我们继续挖掘Windows Azure的存储服务——高级存储.高级存储自然要比普通存储高大上的,因为高级存储是SSD存储!其吞吐量和IO ...

  4. [转]ASP.NET MVC 3 Razor + jqGrid 示例

    本文转自:http://www.cnblogs.com/think8848/archive/2011/07/15/2107828.html 前些天写了一篇有关jqGrid的文章,因为是公司项目的原因一 ...

  5. C#基础---扩展方法的应用

     最近对扩展方法比较感兴趣,就看了看资料,记录一下扩展方法的几种方法. 一. 扩展方法的基本使用: Note: 1. 扩展方法必须在静态类中, 2 扩展方法必须声明静态方法,3 扩展方法里面不能调用其 ...

  6. CF 371C-Hamburgers[二分答案]

    C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  7. java的多线程总结

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: class 类名 extends Thread ...

  8. nmap脚本扫描使用总结

    nmap的脚本默认目录为:/usr/share/nmap/scripts/ Nmap提供的命令行参数如下 -sC: 等价于--script=default,使用默认类别的脚本进行扫描 可更换其他类别 ...

  9. oracle plsql 捕获异常和抛出异常

    在写oracle存储过程的时候很多东西放到存储过程里面比如一些判断等,要比在程序逻辑里面简单很多,但是也会涉及到捕获和抛出一样的问题. 捕获异常 语法: 首先定义异常: <异常情况>  E ...

  10. http协议(十)实体首部字段

    1.定义 包含在请求和响应中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息 2.Allow 通知客户端能够支持的Request-URI指定资源的所有http方法 如果服务器接收到不支 ...