PHP 基础笔记
数据类型
- 字符串
- 整数
- 浮点数
- 布尔值
- 数组
- 对象
- 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 基础笔记的更多相关文章
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- MYSQL基础笔记(五)- 练习作业:站点统计练习
作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...
- MYSQL基础笔记(四)-数据基本操作
数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...
- MYSQL基础笔记(三)-表操作基础
数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...
- MYSQL基础笔记(二)-SQL基本操作
SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
随机推荐
- sql server使用中遇到的问题记录
一.sql server 不能连接远程服务器,但可以连接本地的数据库 我目前用的是sql server 2012 sp1,用着用着突然就不能连接远程服务器上的数据库了,崩溃了一天... 修复试了,卸载 ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- devtmpfs文件系统创建设备节点
分类: LINUX 原文地址:devtmpfs文件系统创建设备节点 作者:wangbaolin719 http://blog.chinaunix.net/uid-27097876-id-4334356 ...
- spring + redis 实现数据的缓存
1.实现目标 通过redis缓存数据.(目的不是加快查询的速度,而是减少数据库的负担) 2.所需jar包 注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要 ...
- 虚拟机centos6.5 --ssh免密码登录
说明:此处是以hadoop虚拟机3台机器为背景进行设置,即master.slave01.slave02 1.在master上,生成公钥.私钥 用hadoop用户登录系统,进入个人主目录,即/home/ ...
- IO的多路复用和信号驱动
Linux为多路复用IO提供了较多的接口,有select(),pselect(),poll()的方式,继承自BSD和System V 两大派系. select模型比较简单,“轮询”检测fd_set的状 ...
- 原来今天是感恩节-Linux基础继续&MySQL和PHP
hi 原来今天是感恩节.虽然一直没有过这个节日的习惯,但仅仅是听到感恩的消息,都能想到一幅幅画面.愿大家安好! 下午开题会议还是有所收获,悄悄的,就变向那个不喜欢自己的人了. 一.Linux基础(二) ...
- 怎样实现ZBrush中的智能对称
ZBrush软件智能化和人性化的工作流程让用户在创作中提高工作效率,体验创作乐趣,说起智能化不得不提的就是ZBrush给我们提供的智能对称功能,所谓的智能对称就是当您在编辑其中一半的物体模型时,执行相 ...
- UVALive 5061 Lightning Energy Report --LCA
题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0) 解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k), ...
- Vijos1046观光旅游[floyd 最小环]
背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...