3_PHP表达式_2_变量
以下为学习孔祥盛主编的《PHP编程基础与实例教程》(第二版)所做的笔记。
PHP变量可分为自定义变量和预定义变量。
以下所谈到的变量均为自定义变量。
1.变量的基本概念
PHP的变量名遵循以下规则:
(1)变量名必须以美元符号($)开头,如$username。
(2)变量名的第一个字符必须是字母或下画线(不能是数字),变量名称可以为字母、数字和下画线的组合,如$user_name_1。
(3)PHP中的变量名是区分大小写的。这意味着$userName和$UserName是截然不同的两个变量。
和传统的高级语言不一样,PHP对于已经定义的变量可以通过重新赋值的方法修改该变量的值,甚至修改该变量的数据类型。
<?php
//以下语句修改$userName变量的值
$userName="张三";
$userName="李四"; //以下语句既修改$sex变量的值,又修改了$sex变量的数据类型
$sex=FALSE;
$sex="男"; echo $userName;
echo "<br/>";
echo $sex;
?>
输出:
李四
男
2.变量的赋值方式
变量赋值是指赋予变量具体的数据,使用赋值运算符 “ = ” 来实现。
PHP提供两种赋值方式:传值赋值和传地址赋值。
(1)传值赋值方式
传值赋值方式将一个值 “ 拷贝 ”赋值给某个变量。
<?php
$age1 = 18;
//以下语句进行传值赋值,变量$age1的值18赋值给变量$age2
$age2 = $age1;
//以下语句修改变量$age2的值,此时变量$age2在内存中开辟新空间存储值20
$age2 = 20;
echo $age1; //该语句输出$age1变量的值为18
echo "<br/>";
echo $age2; //该语句输出$age2变量的值为20
?>
输出:
18
20
说明:
① 程序执行 “ $age2 = $age1 ” 后,内存中并没有新增 $age2 的变量值18,这是由于PHP为了提高内存的使用效率,采用了 “ 写时拷贝 ”的原理对变量进行赋值。简言之,除非发生写(或修改)操作,否 则指向同一个地址的变量值对象将不会被拷贝,这样即节省内存又提高了代码的执行效率。
② 执行 " $age2 = 20; " 语句后,内存才添加了变量 $age2 的变量值20。
(2)传地址赋值方式
传地址赋值是将源变量的内存地址赋值给新的变量,即新的变量引用了源变量的值,改动新变量的值将影响到源变量的值,反之亦然。传地址赋值意味着两个变量都指向同一个数据,不存在任何数据的拷贝过程。PHP通过在源变量($oldVariable)前追加 “ & “ 符号实现传地址赋值,语法格式为: $newVariable = &$oldVariable。
<?php
$age1 = 18;
//进行传地址赋值,变量$age1的地址(引用)赋值给变量$age2
$age2 = &$age1;
$age2 = 20;
echo $age1; //该语句输出$age1变量的值为20
echo "<br/>";
echo $age2; //该语句输出$age1变量的值为20
?>
输出:
20
20
说明:
① 程序执行 " $age2 = &$age1 " 后,变量 $age2与变量 $age1 指向了内存中的同一个变量值18。
② 程序执行 “ $age = 20 ” 语句后,变量 $age2 与变量 $age1 指向了内存中同一个变量值20。
3.可变变量
可变变量允许PHP程序动态地改变一个变量的变量名,可变变量的工作原理是用一个变量的 “ 值 ” 作为另一个变量的 “ 名 ”。
<?php
$varname = "age";
//用$$varname取代$age。下面代码等价于: $age = 20;
$$varname = 20;
echo $age; //输出$age变量的值:20
?>
输出:
20
3_PHP表达式_2_变量的更多相关文章
- SQLSERVER出错提示:此上下文中不允许使用''。此处只允许使用常量、表达式或变量。不允许使用列名。
在执行一段SQL语句时出现了这样的一段错误提示,在网上找了不少答案,都说的不是很详细,反复修改试验,最终解决了此问题.原SQl语句为: insert into shoufei(djbh,sflb,jk ...
- IntelliJ IDEA 给表达式赋变量名称
IntelliJ IDEA 给表达式赋变量名称 学习了:http://blog.csdn.net/tiny__wang/article/details/52988790 类似于Eclipse中的ctr ...
- 有关C/C++中,表达式计算顺序的问题,以及表达式内部变量“副作用”问题(转)
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...
- 3_PHP表达式_3_有关变量或常量状态的函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 1. 数据类型查看函数 PHP为变量或常量提供了查看数据类型的函数,其中包括gettype()和var_dump( ...
- Spark中Lambda表达式的变量作用域
通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...
- c# in deep 之对Linq表达式范围变量限制问题的一些解决办法
linq表达式的标准形式为from...where...select,其中from后面跟的就是范围变量.linq中范围变量需要是泛型的集合,假如我们想对ArrayList或Object[]进行处理,l ...
- lambda表达式,变量作用域
# lambda表达式 def filter_lt(predidcate,lt): result=[] for elem in lt: if predidcate(elem): result.appe ...
- 3_PHP表达式_4_PHP运算符
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 3.4.1 算术运算符 <?php $num1 = -10; $num2 = -4; $num3 = $nu ...
- 3_PHP表达式_5_数据类型转换_类型强制转换
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 3.5.2 类型强制转换 类型强制转换允许编程人员手动将变量的数据 ...
随机推荐
- 【E2E】Intel AI DevCloud 的申请和登陆
参考:https://www.cnblogs.com/WaitingForU/p/9091096.html 一.注册 https://www.cnblogs.com/WaitingForU/p/909 ...
- ubuntu18 更换屏幕分辨率
ubuntu18.04怎么修改屏幕分辨率 最近在自己的电脑中安装了ubuntu18.04系统,默认分辨率不对所以只好自己修改分辨率,但是在桌面右键并没找到设置分辨率的选项,那么我们应该在哪里设置分辨率 ...
- 六、postman做ui测试
一.思路 发请求去拿到网站的响应——>html 解析html标签,判断一些元素是否显示 二.目的 快速检查ui是否正确 三.用到的库 Cheerio https://cheerios.js.or ...
- Qt编写气体安全管理系统22-报警联动
一.前言 报警联动功能不是一个常规的功能,一般是给客户定制的功能,比如探测器采集到的数据报警了,不仅本地要播放报警声音,存储报警记录,发送报警短信和邮件,还需要触发警号面板灯进行报警,而警号面板指示灯 ...
- RabbitMQ 入门教程(PHP版) 第四部分:路由(Routing)
路由(Routing) 在前面的第三部分教程中,我们实现了一个简单的日志系统.可以把日志消息广播给多个接收者. 本篇教程中我们打算新增一个功能——使得它能够只订阅消息的一个字集.例如,我们只需要把严重 ...
- 《Learning a Discriminative Feature Network for Semantic Segmentation》解读
旷世18年的CVPR,论文链接:https://arxiv.org/abs/1804.09337 Motivation:针对分割中的“类内不一致”和“类间一致性”的两大问题,设计了结合Smooth n ...
- div定位relative和absolute和float测试3
position等于absolute的时候,不一定是相对于浏览器定位,当div存在包含关系时,父div设置成relative,其中包含的div设置成absolute就是相对于该父div的了.该文测试了 ...
- require.js的基本用法
一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...
- Tools - Summary List
通用 PicPick:https://picpick.app/zh/ Q-Dir:http://www.softwareok.com/?Download=Q-Dir 7-Zip:https://www ...
- 【GStreamer开发】GStreamer基础教程15——继承Clutter
目标 Clutter是一个开源的库,用来创建快速.可移植和动态的GUI.GStreamer可以通过cluttersink这个element把clutter集成进来,允许视频像纹理一样使用.本教程会展示 ...