php基础巩固一

php基础

基本语法形式

区分大小写

  • 主要是指变量名区分大小写
  • 常量通常也区分,但常量也可以自己设定为不区分(不推荐)
  • 函数名不区分
  • 系统中使用的关键字也不区分大小写,比如if, else, for

语句结束符,用分号

  • 一个php标记块中的最后一个分号可省略
  • php结束标记省略则不能省略最后一个分号

不建议省略!

变量

基本含义

变量是包含了一个名称和一个值的“标识符”。
形式:变量必须以$开头,后面紧跟变量名

//表示变量名$val 引用了数值1的地址
//当我们在代码中使用$v1这个变量名,就是指使用“1”这个数据值。
$va1 = 1;

注意:通常,在“能够出现”变量的语法中,只要出现$符号,并在其后出现紧挨着的字符,就会被识别为一个变量,即使不存在该变量,

echo  “人民币符合¥像个羊,美元符号$象个钱”;//这里就会有问题!

变量的基本使用

  • 定义变量(赋值):直接给变量赋值,就是定义;

    • 不支持js中的那种“定义但不赋值”的语法。
    • 第一次给一个变量赋值,就算定义变量。
  • 取值:所有需要一个变量值的语句中,就会取得该变量的值,常见包括

    • 输出:echo$v1; //取得$v1的值,并输出
    • 给其他变量赋值$v2 = $v1; //取得$v1的值,并赋值给$v2
    • 参与运算:$v3 = $v1 + 3; //取得$v1的值,并跟3相加
  • 判断变量是否存在isset()

    • 存在,就返回true,不存在就返回false
    • 实际上,如果一个变量的值是null,返回的也是false
  • 修改变量值(赋值)

    • 第二次及以后给一个变量赋值,就算修改变量值
  • 删除unset():就是断开变量名跟数据之间的“引用关系”

命名规则

通常命名包括变量名,函数名,常量名,类名,接口名,等等

基本规则

  1. 只能使用大小写字母,下划线(_),数字
  2. 数字不能开头
  3. 不能跟所在环境(系统)的关键字重名(比如if, for, function…)

行业规则(潜规则)

基本规则,保证的是语法的正确性。
行业规则,保证的是是否能得到别人的尊重!
行业规则中,有如下几种常用的命名规则:

  1. 驼峰命名法:
    示例:name, myName, myFatherName
  2. 帕斯卡命名法:
    示例:Name, MyName, MyFatherName
  3. 下划线间隔法:
    示例:name, my_ame, my_father_name

变量间的传值方式

  1. 这里讨论的传值方式是指:一个变量对另一个变量
  2. 它不仅仅适用于赋值语句,也适用于其他有同样含义的语句,比如:函数的实参到形参
  3. 传值方式只有2种:值传递,引用传递
  4. php中,所有变量,默认都是值传递。
  5. 要想使用引用传递,必须使用引用传递的符号: &

值传递

是指将一个变量的数据值(数据内容)拷贝一份,然后赋值给另一个变量。

$v1 = 1;
$v2 = $v1;//有值传递
$v3 = $v1 + 10;//无值传递

《php基础巩固一》 Paste_Image.png

引用传值

将一个变量的引用关系拷贝一份,然后赋值给另一个变量,即另一个变量也同样由该关系决定了指向某个数据

$v10 = 10;
$v20 = &$v10;

《php基础巩固一》 Paste_Image.png

赋值(传值)完之后,两个变量指向同样一个数据。则:对变量v10的操作,改变的数据,也就是体现为v20也发生了改变。

$v10++;
echo $v20;//11

在这种引用传值的情况下,unset一个变量,则另一个跟它有关(指向同样数据的关系)的变量,并不受影响。

unset($v20);
echo $v10;//11
echo $v20;//报错,提示Undefined

可变变量

所谓可变变量,就是一个变量的名,又是一个变量。

$v1 = “abc”;        //这是一个字符串变量,其内容是字符串“abc”
$abc = 10;      //这是一个普通变量,其内容是数字10
echo  $$v1;     //此时,就是所谓“可变变量”
  1. 凡是$符号出现,就会有可能理解为是一个变量
  2. 这里第一个“$”出现了,则php就视图将其解释为一个变量,变量名是$v1;
  3. 我们有知道,$v1的值是”abc”,
  4. 那么,第一个“$”符号后面的变量名,就得到为“abc”
  5. 即:echo 试图输出的是变量$abc, 自然是数字10

即从最右边的$符号开始看起$(&v1) => $abc => 10,理论上,可变变量的嵌套还可以更多,比如:$$$def;

预定义变量

  1. 预定义变量又叫超全局变量,包括:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, ..........(大约10个)
  2. 作用域问题:php中,自定义的变量的作用域,分两种:全局作用域(函数外),局部作用域(函数内)。但预定义变量的作用域称为“超全局作用域”:全局作用域 + 局部作用域的总和(函数内外全都可用)
  3. 数据类型问题:超全局变量都是数组!

$_GET变量(数组)

$_GET这个预定义数组变量,就是指以GET这种方式提交的所有数据的集合(数组),例如

形式一:
<form  action=”abc.php”  method=”get” >
项目1: <input type=”text”   name=”uName”   />
项目2: <input type=”password”   name=”uPswd”   />
<input type=”submit”  value=”提交”  />
</form>

其作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php)

形式二:
<a  href=”abc.php?uName=test1&uPswd=123”>Get</a>

其作用是:用户点击链接后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

形式三:
<script>
location.href = “abc.php?uName=test1&uPswd=123”;        //利用location对象的属性href
</script>

其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

形式四:
<script>
location.assign( “abc.php?uName=test1&uPswd=123”);  //利用location对象的方法assign()
</script>

其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

不管哪种形式的get提交过来的数据,获取数据是一样的:(在abc.php网页中)

<?php
$v1 = $_GET[‘uName’];   //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2 = $_GET[‘uPswd’];       //该键名必须跟提交的时候的名字完全一致(区分大小写)
?>

下面例如输出$_GET,首先是表单

<form action="get_1.php" method="get">
    姓名:<input type="text" name="uName">
    密码:<input type="password" name="uPswd">
    年龄:<input type="text" name="uAge">
    <br>
    爱好:
    <input type="checkbox" name="uHobby[]" value="zuqiu" />足球
    <input type="checkbox" name="uHobby[]" value="lanqiu" />篮球
    <input type="checkbox" name="uHobby[]" value="yumaoqiu" />羽毛球
    <br>
    <input type="submit" value="提交">
</form>

php代码

<?php 
    var_dump($_GET);
 ?>

最终输出结果是

array(4) {
  ["uName"]=>
  string(4) "Jens"
  ["uPswd"]=>
  string(6) "123456"
  ["uAge"]=>
  string(2) "21"
  ["uHobby"]=>
  array(2) {
    [0]=>
    string(6) "lanqiu"
    [1]=>
    string(8) "yumaoqiu"
  }
}

$_POST变量(数组)

类似$_GET变量(数组),$_POST代表页面通过post方式提交过来的数据所形成的数组。

post提交数据,通常只有一种形式:

    <form  action=”abc.php”  method=”post” >
        项目1: <input type=”text”   name=”uName”   />
        项目2: <input type=”password”   name=”uPswd”   />
        <input type=”submit”  value=”提交”  />
    </form>

其作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php) 接收post数据的形式为:(在abc.php网页中)

<?php
    $v1 = $_POST[‘uName’];  //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
    $v2 = $_POST[‘uPswd’];  //该键名必须跟提交的时候的名字完全一致(区分大小写)
    
    也可以显示所有post数据:
    var_dump($_POST)
?>

通常,网页中的form表单,一般都用post方式,get方式主要体现在其他3种形式。

$_REQUEST变量(数组)

$_REQUEST数组,其实并不是一个独立的数据来源,而是$_POST数据和$_GET数据的“总和”即$_REQUEST数组中包括了所有$_POST数据和$_GET数据——其实是由系统内部自动存储的。通常,$_POST数据和$_GET数据不会“同时出现”,$_REQUEST数组就代表了其中之一。

无论表单的提交方法是GET或POST,其接收的方式都是

$u = $_REQUEST['XXX'];

而get和post数据同时提交的情形

<form  action="abc.php?a=5&b=10"  method="POST" > ...
    项目1: <input type=”text”   name=”uName”   />
    项目2: <input type=”password”   name=”uPswd”   />
    <input type=”submit”  value=”提交”  />
</form>

则此时,uName和uPswd两个数据以post方式提交给abc.php,并,同时:a=5和b=10两个数据,以get方式提交给abc.php
则在页面abc.php中:

//这样取得get数据:
$v1 = $_GET[‘a’];
$v2 = $_GET[‘b’];   
//这样取得post数据:
$v3 = $_POST[‘uName’];
$v4 = $_POST[‘uPswd’];
//但,也可以这样取(全有了):
$v1 = $_REQUEST[‘a’];
$v2 = $_REQUEST[‘b’];
$v3 = $_REQUEST[‘uName’]
$v4 = $_REQUEST[‘uPswd’]

当get数据和post数据同时提交并其中有重名的时候,情况怎么样呢?

  • 尽量避免重名;
  • 如果重名了,此时$_REQUEST只会记录(存储)其中一个数据(要么post数据,要么get数据)
  • 至于记录的是哪个,是有php.ini中的一个设置项来决定:
    • request_order = “GP”; //这是默认值,G代表GET,P代表POST。含义是:先存储GET数据,再存储POST
    • 如果重名,此时POST就会覆盖GET数据,改为:request_order = “PG”, 顺序反过来
    • $_GET, $_POST, $_REQUEST三种数据是相互独立的。

$_SERVER变量(数组)

该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。

  • 常用的有:
    • REMOTE_ADDR, 用户的IP地址
    • SERVER_ADDR: 服务器端的IP地址
    • SERVER_NAME: 服务器名(主机名)
    • DOCUMENT_ROOT: 站点绝对路径(其实就是主机设置中的DocumentRoot
    • PHP_SELF:当前网页的文件路径
    • QUERY_STRING: 表示一个get请求的整体字符串,类似这样:

输出所有项的代码

<?php   
    foreach ($_SERVER as $key => $value) {
        echo $key . " ==> " . $value;
    }
 ?>

$GLOBALS变量(数组)

似乎是一个多余的变量:它只是把我们自己定义的所有全局变量存储到该数组中:变量名就是该数组的下标(键名),变量值就是对应的值。例如

<?php 
    $va1 = 1;
    $va2 = "jehe";

    var_dump($GLOBALS);
 ?>

则输出的结果为

array(7) {
  ["GLOBALS"]=>
  *RECURSION*
  ["_POST"]=>
  array(0) {
  }
  ["_GET"]=>
  array(0) {
  }
  ["_COOKIE"]=>
  array(0) {
  }
  ["_FILES"]=>
  array(0) {
  }
  ["va1"]=>
  int(1)
  ["va2"]=>
  string(4) "jehe"
}

常量

含义:用于存储一个不会变化也不希望变化的数据的标示符。
常量命名规则,同变量,但习惯说,常常将常量的名称使用“全大写”形式。

定义形式

使用define()函数定义

  1. 使用形式:define(“常量名”, 常量值),推荐常用名使用全大写形式

例如

define("PI",3.14);
echo PI;// 3.14

使用const语法定义

  1. 使用形式: const 常量名 = 常量值;
  2. 但const语法只能在“最顶层”的代码域中使用(不能在大括号中),也即,const语法不能在函数中或条件语句中或其他表示一个“范围”的语句中使用

例如

const PI = 3.14;
if(PI > 10){
    const PW = 5;// 错误,只能定义在最顶部
}

使用常量

  1. 直接使用名字
  2. 使用constant()函数:constant(“常量名”)

例如

<?php
    define("PI",3.14);      
    echo(3.14);
    echo(constant("PI"));
    
?>

常量变量的区别

  • 定义形式不同:常量无需$符号
  • 使用形式不同:常量无需$符号
  • 可变程度不同:常量的值不可以改变,常量也不可以销毁
  • 作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)
  • 可用类型不同:常量只能存储标量类型:int,float,string,bool

判断常量是否存在

判断的结果为布尔值。
常用形式:if ( defined (某常量名) == false ){ …..这里可以去定义该常量;}
实际上,可以这样:
$result = defined (某常量名); //结果是true或false

使用一个未定义的常量(特殊情况)

使用一个未定义的常量会报一个错误(notice错误)——跟使用一个未定义的变量一样——当然不推荐。但是:php,此时会得到一个意想不到的结果:似乎该常量存在,并该常量的值就是该名字。

《php基础巩固一》 Paste_Image.png

预定义常量

php语言中,预定了大量的常量,可以直接使用。其中有些常量,是需要某些模块打开之后才有(比如mysql模块)

  • 比如M_PI(圆周率), PHP_OS(操作系统), PHP_VERSION(php版本号),PHP_INT_MAX(php中的最大的整数值)
  • 参考手册〉附录〉保留字列表〉预定义常量

魔术常量

魔术常量其实是一种值会随着一定的条件(环境)而变化的常量,形式和使用上是常量,但实际上,其值会改变。

  • 比如:__DIR__(当前网页文件的所在目录),__FILE__(当前网页文件),__LINE__(当前这一行)
  • 魔术常量其实类似变量,其值随着不同代码而变化,不区分大小写
  • 参考手册〉语言参考〉常量〉魔术常量

例如:

<?php 
    echo __DIR__;
    echo "<br />";
    echo __FILE__;
    echo "<br />";
    echo __LINE__;
 ?>

输出结果为

D:\PHP\demo2
D:\PHP\demo2\get_1.php
6
    原文作者:代码与艺术
    原文地址: https://www.jianshu.com/p/86d6da3b674f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞