php入门第二篇---变量
php变量
1.变量的定义:a.变量必须以$符号开始,注意这里$符号并不属于变量的名称,即$+变量名称
b.变量名称必须以字母或者下划线开始。
c.变量中只能含有字母数字以及下划线;
d.变量名区分大小写。
2.变量的创建:a.注意在php中,变量类型是不需要声明的,即不存在c或c++中的int a; string str;之类的
$x=5;//php会默认为整形
$y=0.5;//默认为浮点型
$str="hello";//默认为字符串型
b.当然我们也可以对变量进行一些运算,对于同种类型的话,结果自然便是同种类型,但是如果不同类型?
比如:<?php $x=3.5; $y=2; $z=$x+$y; echo $z; ?>那么会输出5.5,即整形与浮点型运算,会得到浮点型。
<?php $x="5.5"; $y=2; $z=$x+$y; echo $z; ?> 你会惊奇地发现还是7.5
<?php $x="abc"; $y=2; $z=$x+$y; echo $z; ?> 但这种情况的话,输出的结果为2,即这里会将$x变量默认为0
c.变量类型的转换:常用的类型有整型:int 浮点型: double float real 字符串:string 布尔:bool boolean 数组:array 对象:object
转换方法:(1)用括号括起类型:如<?php $x=2.5; $y=(int)$x;?>那么会输出2;
(2)使用转换函数:intval(),float(),strval();如:$str="145.465abc"; $x=intval($str); $y=floatval($str); 那么分别会得到145和145.465;
(3)使用settype()函数,如: $x=10.0;$y=settype($x,"int"); $z=settype($x,"bool"); 那么分别会得到10和true值。
3.全局变量:所有函数外中定义的变量,除了函数外,可以被任何脚本中的任何部分访问,但对于在函数内要访问全局变量,需要使用global关键字。我们先看个例子:
<?php
$x=10;
$y=5;
function test(){
$z=3;
global $x;
echo "<p>测试函数内变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
}
test();
echo "<p>测试函数外变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
?>
然后我们运行下,结果如下:
我们会发现存在乱码问题,并且存在两个notice,表示两个变量为定义。
我们先来解决乱码问题,其实乱码的根本原因是我们输出了中文,而我们又没有去定义字符编码。
php中文乱码问题解决办法一:
<meta charset="utf-8">//定义字符编码
<?php 上面的php文件内容 ?>
php中文乱码问题解决办法二:
<?php header("Content-Type:text/html;charset=utf8");//在php文件内部定义字符编码
?>
按照上述方法解决乱码问题后,我们可以得到以下结果:
我们会发现在test函数内的$y并没有输出,原因很简单,$y是个全局变量,而在函数内,没有用global定义,$z没有输出是因为$z是在函数内声明的,属于局部变量。
我们再看个例子:
<?php
header("Content-Type:text/html;charset=utf8");
$x=10;
$y=5;
function test(){
$z=3;
$x=5;
global $y;
echo "<p>测试函数内变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
}
test();
$x=1;
$z=5;
echo "<p>测试函数外变量</p>";
echo "变量x为: $x </br>";
echo "变量y为: $y </br>";
echo "变量z为:$z";
?>
结果如下:
我们在全局变量定义了$x,然后在函数内同样也声明了个$x,我们发现其实这样是兼容的,同理,$z也是如此。而且全局变量$x在脚本中也是可以重新被赋值的,但要注意一点的就是如果全局变量在函数内定义是不能赋值的,如:global $x=1;这样是会报错的。
4.global关键字:上面我们已经谈过,在函数内使用全局变量的话,要用global,实际上php把所有的全局变量都存储在一个名为$GLOBALS[index]的数组中,index为变量的名称,所以如果我们要在函数内访问全局变量的话,也可以用$GLOBALS数组,如下:
<?php
header("Content-Type:text/html;charset=utf8");
$x=10;
$y=5;
function test(){
$z=$GLOBALS['x']+$GLOBALS['y'];
echo "<p>测试函数内变量</p>";
echo "变量z为: $z </br>";
}
test();
?>
结果如下:
5.static作用域:当一个函数完成时,通常其函数内的变量都会被删除,而如果变量前加了static关键字的话,我们每次调用函数时,该变量会保存为前一次函数被调用时的值。
<?php
header("Content-Type:text/html;charset=utf8");
function test(){
static $x=0;
$x++;
echo "$x<br>";
}
test();
test();
test();
?>
结果为:1 2 3,原因很简单,因为$x被static声明后,保留的是上一次函数调用的值,而不会重新被赋值为0;
转载于:https://www.cnblogs.com/xy95/p/5789467.html
php入门第二篇---变量相关推荐
- ElasticSearch入门 第二篇:集群配置
这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- Redis入门第二篇【存储数据结构之string类型】
tags: Redis title: Redis入门第二篇[存储数据结构之string类型] Redis存储的数据结构 Redis支持的数据结构有好几种: It supports data struc ...
- python语法讲解小白入门第二篇
今天继续为大家分享下自己学习python3总结的语法笔记,专为python小白量身打造,如果你喜欢可以点个关注哦!如果你是刚入门的python小白的话,建议你从第一篇开始学起,这样才能效果更好一些,点 ...
- Hive入门第二篇之hive的安装部署(详细教程)
第一种方式: derby版hive (不推荐) 默认使用derby(数据库)维护元数据此版本,每个节点自己独立维护一个derby数据库,所以在节点1添加了数据库,在节点2 无法查看第一步:查看系统自带 ...
- Avalonia跨平台入门第二篇
前面一篇简单的弄了个Demo去玩耍了一下Avalonia;你还别说效还挺有意思,这不咱们今天接着更深一步的去了解他,来看看效果: 在统信UOS下运行效果: 环境搭建在统信UOS(多一步开启开发模式): ...
- ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结
这几天写了南邮的web题目,都比较基础,但是对我这个小白来说还是收获蛮大的.可以借此总结一下web题的类型 一,信息都藏在哪 作为ctf题目,肯定是要有些提示的,这些提示有时会在题目介绍里说有时也会隐 ...
- WPF入门第二篇 MVVM与Binding
MVVM与Binding MVVM,即Model-View-ViewModel的首字母缩写,在这种开发模式下常用binding来对View和ViewModel进行绑定. 添加三个文件夹,分别命名为Mo ...
- Springcloud入门第二篇
生产者消费者注册以及调用演示 基础的创建请看我的上一篇文章 再创建两个model order和user order依赖 <dependencies><dependency>&l ...
- ElasticSearch入门 第一篇:Windows下安装ElasticSearch
这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
最新文章
- linux驱动:TI+DM8127+GPIO(一)之应用——报警输入输出
- dnf超时空漩涡副本路线流程图_DNF超时空漩涡真的不难,掌握这些技巧和打法,自己开团当团长!...
- Redis RDB文件格式全解析
- uvalive4840(n*n方阵的最小花费)
- 2020-10-13 四元数用法(不讲原理,只讲计算规则)
- ALTER 简单操作(mysql)
- 试用期间,云服务器操作系统可以更换吗?
- iptables端口转发
- UE4实时渲染需要注意的点——RTR(Real Time Rendering)
- 【JS】常用效果总结
- java毕业生设计学籍管理系统计算机源码+系统+mysql+调试部署+lw
- monitorServer IBM Tivoli Enterprise Monitor Server
- Java网络 1.3 开发工具介绍
- 通读《C++ primer plus》— C++中的5种数据类型转换方式
- Linux:以K、M、G查看文件大小;
- swagger no content
- 美国盗版党(Pirate Party)
- java太臃肿_Java简洁开发技巧,减少繁琐臃肿的代码
- 卷积神经网络模型部署到移动设备
- python开发购物网站_python实现简单购物商城