楠Go随笔

第七课:PHP学习之变量和常量

2017-12-02 14:57:39 admin 阅读 网站首页 > PHP > PHP学习

变量就是在程序运行过程中数值可以发生更改。由于PHP是弱语言类型,在变量上没有明显区分各种类型,你可以将一个字符串赋值给变量data之后,再把整型值赋值给data。环境会动态确定变量类型。

在PHP中变量根据作用域可以分为以下三种类型。

局部变量

    根据声明变量位置的不同会影响到变量的访问范围。

    在函数内部声明的变量是局部变量,它只能在该函数内部引用。当函数运行结束后,局部变量将会销毁回收。

    同时,在执行函数时传递的变量也是一个局部变量,通过拷贝副本的方式传递进函数内部,如果不采用引用变量的方式的话,在函数内部修改传递进来的实参,不改变外部变量的内容。

全局变量

    与局部变量相反,全局变量可以在程序中任意位置访问.当然如果是在函数内部访问全局变量的话需要用关键字 global 来限定,表明这是一个全局变量。在PHP中没有代码块的概念,在函数外部定义的变量就是全局变量。

<?php
$name = '我是一个全局变量'; printName(); function printName(){     echo "我现在在函数内部输出";     global $name ; #表明 变量name 是一个全局变量     echo $name; }
?>

除了自定义全局变量外,系统还内置了超全局变量,可以在程序的任何位置访问,在函数中也无须用global关键字声明。

$GLOBALS global全局变量 所有的全局变量都以键值对形式存放在该数组 键是变量名 与其他超全局变量不同 该变量名不带_。

$_GET URL 请求字符串中的键值对数组

$_POST post表单提交时的键值对数组

$_COOKIE HTTP请求携带的cookie信息 以键值对形式存放在该数组

$_SESSION 用户session数据数组 得开启session会话

$_SERVER 服务器信息数组

$_FILES HTTP发送POST请求携带的文件信息数组 

静态变量

静态变量的作用域称为静态作用域,用static关键字声明,通常在函数内部定义,可用于数据缓存。

区别局部变量静态变量
函数执行完毕函数内部变量会销毁在整个程序执行完毕才销毁
变量初始化重复执行函数会重新初始化第一次执行函数时变量会初始化一次

函数就是执行某些功能的代码块,在开发过程中我们需要减少重复的劳作,需要将一些逻辑抽离出来组成函数。但是有些情况下在整个程序运行期间需要多次执行某个函数获取信息,这个过程中如果采用局部变量会反复重新获取,如数据库操作,这样就会增加整个程序的响应时长。当然你可以用全局变量保存,但就是担心在外部调用会修改其值。所以采用了折中的方案,通过静态变量存储。一方面,在函数内部可以访问,另一方面,在整个程序运行期间都存在。

<?php
#做一个会员列表 用静态变量实现 #该数组存储用户uid 通过uid获取用户信息 $array = array(2,1,3,5,7,8,5,2,1);   foreach ($array as $v){     $row = getData($v);     #输出会员信息     print_r($row); } function getData($uid){     static $data = array(); #初始化静态变量 用static声明     if ($data[$uid]) {         #判断是否已经保存 $uid的用户信息 有的话从缓存里面返回         return $data[$uid];     } else {         $row = getUserData($uid);     } } function getUserData($uid){     #数据库操作 获取uid的用户信息 返回row     return $row; }
?>

另外,PHP支持可变变量,也就是说能够对变量名称进行动态解析。如

<?php
$var = '我是一个变量'; $data = 'var'; #进行变量动态解析  程序先将$data的值解析出来 为 var 再去获取变量名为var的变量值 echo $$data;
?>

可变变量一般都是用于框架底层的处理,在应用层开发时使用可变变量会让代码难以理解和阅读,所以不建议使用,如果你在阅读人家源码的时候看到这个形式也别惊讶。

量就是在程序运行过程中一经赋值不可更改的容器。

在PHP中有两种常量类型。

自定义常量

定义常量可以用define('常量名','常量值','是否忽略大小写'),不需要用$符号开头,一般而言为了直观,常量都用大写字母,多个单词之间用下划线隔开。

<?php
define('IN_APP',true); #定义一个常量 常量名为IN_APP 常量值为布尔值 true 默认是区分常量名大小写 而且常量值 只能是整型 字符型 和布尔型数据 不能为数组 #判断常量是否已经定义可以用 defined函数 if (defined('IN_APP')) {     echo "已经定义了该常量".IN_APP; }
?>

系统常量   系统内置的常量 细分成两种

    预定义常量 

        有些预定义常量需要由相应的拓展库来定义,如果没有加载扩展库,常量无法使用。像如下常量是公共常量

            PHP_VERSION   当前PHP程序的版本

            PHP_OS  PHP环境下的操作系统

            PHP_EOL 系统换行符 Windows是 \r\n   Linux是\n MAC是 \r

            DIRECTORY_SEPARATOR    路径分隔符 系统路径分隔符 Linux是 \  Windows 是/或\

            M_PI 返回圆周率的值

   魔术常量 根据使用的情况而发生改变的"常量" 因为是系统内部更改,人为无法设置 所以也称为常量 常见的魔术常量如下 左右结尾分别是两个下划线_ 魔术常量不区分大小写

            __LINE__ 返回当前文件所在行的行数

            __FILE__ 返回当前文件的绝对路径 含文件名

            __DIR__ 返回当前文件的绝对路径 不含文件名

            __FUNCTION__ 返回当前函数的函数名

            __CLASS__ 返回当前的类名

            __METHOD__ 返回当前类的方法名

            __NAMESPACE__ 返回当前文件的命名空间名称

常量的诞生为我们在开发中统一规格提供了帮助。不怕在运行过程中被误改导致错误。

搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2018 www.MetInfo.cn