PHP变量、常量、数据类型、循环等(入门基础)

一、变量

1、变量规则

变量以 $ 符号开始,后面跟着变量的名称;变量名必须以字母或者下划线字符开始;变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ );变量名不能包含空格;变量名区分大小写($y 和 $Y 是两个不同的变量)。

PHP 没有声明变量的命令。变量在第一次赋值时被创建,当赋一个文本值给变量时,需在文本值两侧加上引号

不必向 PHP 声明变量的数据类型。PHP会根据变量的值,自动把变量转换为正确的数据类型。

2、变量作用域

变量的作用域是脚本中变量可被引用的部分。
PHP 有四种不同的变量作用域:global;local;static;parameter(参数)

global。在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

local。在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

static。当一个函数完成时,它的所有变量都会被删除。如果希望某个局部变量不要被删除,可在第一次声明变量时使用 static 关键字。然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注:该变量仍然是函数的局部变量。

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

<?php
function Test()
{
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符,PHP中换行可以用PHP_EOL来替代,以提高代码的可移植性,windows平台相当于echo "\r\n";
}
 
Test();
Test();
Test();
?>

运行结果:0 1 2

参数(parameter)是通过调用代码将值传递给函数的局部变量。参数是在参数列表中声明的,作为函数声明的一部分。为了给函数添加更多的功能,可以添加参数。参数就在函数名称后面的一个括号内指定。
如需让函数返回一个值,需使用 return 语句。

<?php
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}
 
echo "1 + 16 = " . add(1,16);
?>

输出:1 + 16 = 17

补:
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。

// 是 PHP 单行注释;/* 是PHP 多行注释 */

echo 和 print 区别:
echo - 可以输出一个或多个字符串,没有返回值,输出的速度比 print 快。
print - 只允许输出一个字符串,返回值总为 1。
输出的字符串可以包含 HTML 标签。

3、超级全局变量(预定义变量)

PHP中预定义了几个超级全局变量(superglobals) ,它们在一个脚本的全部作用域中都可用。不需特别说明,就可在函数及类中使用。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
$_SERVER['PHP_SELF']:当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用,将得到 /test.php/foo.bar。
$_SERVER['SERVER_NAME']:当前运行脚本所在服务器的主机名。如果脚本运行于虚拟主机中,该名称由虚拟主机所设置的值决定。

$_POST 变量用于收集来自 method=“post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。

$_GET 变量用于收集来自 method=“get” 的表单中的值,及浏览器地址栏中的 ? 之后的内容。
$_GET 也可以收集URL中发送的数据。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏,有字符数限制),并且对发送信息的量也有限制(值是不能超过 2000 个字符)。

$_SESSION: 用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在cookie中,或通过 URL 进行传导。
在把用户信息存储到 PHP session 中之前,首先必须启动会话。注:session_start() 函数必须位于 标签之前。
unset() 函数用于释放指定的 session 变量。 session_destroy() 函数彻底重置 session,将失去所有已存储的session数据。

$_FILES

$_FILES:HTTP 文件上传变量。可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可以是 “name”、“type”、“size”、“tmp_name” 或 “error”。如下所示:
$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
实例:限制用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB。检测了文件是否已存在,如不存在,则把文件拷贝到名为 “upload” 的目录下。

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "错误:: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
        
        // 判断当前目录下的 upload 目录是否存在该文件
        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " 文件已经存在。 ";
        }
        else
        {
            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
        }
    }
}
else
{
    echo "非法的文件格式";
}
?>

$_COOKIE

$_COOKIE:HTTP Cookies(用户会话标识)。cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,能够创建并取回 cookie 的值。
setcookie() 函数用于设置 cookie。注:setcookie() 函数必须位于 标签之前。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)
语法:

setcookie(name, value, expire, path, domain);

expire:到期。可设置 cookie 的过期时间。

<?php
$expire=time()+60*60*24*30; // 过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)
setcookie("user", "runoob", $expire);
?>

$_COOKIE 变量用于取回 cookie 的值。

$_REQUEST

$_REQUEST 用于收集HTML表单提交的数据。包含了 $_GET、$_POST 和 $_COOKIE 的内容。显示不显示要看传递方法。
$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至< form >标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果希望其他的PHP文件来处理该数据,可修改该指定的脚本文件名。 可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

<!DOCTYPE html>
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = htmlspecialchars($_REQUEST['fname']); 
echo $name; 
?>

</body>
</html>

二、常量

常量值被定义后,在脚本的其他任何地方都不能被改变,都可以使用

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

设置常量,使用 define() 函数,函数语法如下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

name:必选参数,常量名称,即标志符。
value:必选参数,常量的
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写insensitive(不敏感)。默认是大小写敏感的。

魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。这些特殊的常量不区分大小写。
例如__LINE__ 的值就依赖于它在脚本中所处的行来决定,返回文件中的当前行号

__FILE__:文件的完整路径和文件名(如果是符号连接,则是解析后的绝对路径)。如果用在被包含文件中,则返回被包含的文件名。

__DIR__:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。

__FUNCTION__函数名称,返回该函数被定义时的名字(区分大小写)。

__CLASS__类的名称,返回该类被定义时的名字(区分大小写)。

__TRAIT__Trait 的名称,自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits(特点)。Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 名包括其被声明的作用区域。

三、数据类型

PHP 支持 10 种原始数据类型。四种标量类型:bool(布尔型)、int(整型)、float(浮点型,也称作 double)和string(字符串);四种复合类型:array(数组)、object(对象)、callable(可调用)和iterable(可迭代);最后是两种特殊类型:resource(资源)和NULL(无类型)。
PHP官方类型解释

NULL 值表示变量没有值。可以通过设置变量值为 NULL 来清空变量数据

var_dump() 函数返回变量的数据类型和值

PHP 变量类型比较
松散比较:使用两个等号 == 比较,只比较,不比较类型。
严格比较:用三个等号 === 比较,除了比较值,也比较类型

x != y 和 x <> y :不等于。如果 x 不等于 y,则返回true。
x !== y :绝对不等于。如果 x 不等于 y,或它们类型不相同,则返回 true。

1、字符串

可以将任何字符串放在单引号和双引号中。在PHP代码中尽量使用单引号,若包含变量需要进行解析时,则使用双引号。

并置运算符 (.) 用于把两个字符串值连接起来。

strlen() 函数返回字符串的长度(字节数)。
常用在循环和其他函数中确定字符串何时结束。(例如,在循环中,需要在字符串中的最后一个字符之后结束循环。)

strpos() 函数用于在字符串内查找一个字符或一段指定的文本
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
注:字符串中第一个字符的位置是 0

PHP String 函数

2、数组

数组可以在一个变量中存储多个值,可以根据访问其中的

array() 函数用于创建数组
count() 函数用于返回数组的长度(元素的数量)。

在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组

(1)数值数组
两种创建数值数组的方法:
1、自动分配 ID 键(ID 键总是从 0 开始):

$A=array("a","b","c");

2、人工分配 ID 键:

$A[0]="a";
$A[1]="b";
$A[2]="c";

使用 for 循环遍历并打印数值数组中的所有值:

<?php
$A=array("a","b","c");
$arrlength=count($A);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $A[$x];
    echo "<br>";
}
?>

(2)关联数组
关联数组是使用分配给数组的指定的键的数组。
有两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
or:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

使用 foreach 循环遍历并打印关联数组中的所有值:

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

(3)多维数组
多维数组是包含一个或多个数组的数组。在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。以此,可创建二维或者三维数组:

<pre>
<?php
// 二维数组:
$cars = array
(
    array("a",100,96),
    array("b",60,59),
    array("c",110,100)
);
print_r($cars);
?>
</pre>

运行结果:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => 100
            [2] => 96
        )

    [1] => Array
        (
            [0] => b
            [1] => 60
            [2] => 59
        )

    [2] => Array
        (
            [0] => c
            [1] => 110
            [2] => 100
        )

)

数组排序函数

sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的,对数组进行升序排列
ksort() - 根据关联数组的,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列

PHP Array 函数

3、对象

在 PHP 中,对象必须声明。首先使用class关键字声明类对象(类是可以包含属性和方法的结构),然后在类中定义数据类型,最后在实例化的类中使用数据类型。

注:
类使用 class 关键字后加上类名定义。

类名后的一对大括号({})内可以定义变量和方法

类的变量使用 var 来声明,变量也可以初始化值。

类定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
如下,类创建后,可以使用 new 运算符来实例化该类的对象。

<?php
class Site {
    /* 成员变量 */
    var $url;
    var $title;

    /* 成员函数 */
    function setUrl($par){
        $this->url = $par; // 变量 $this 代表自身的对象。
    }

    function getUrl(){
        echo $this->url . PHP_EOL;
    }

    function setTitle($par){
        $this->title = $par;
    }

    function getTitle(){
        echo $this->title . PHP_EOL;
    }
}
$google = new Site;

// 调用成员函数,设置标题和URL
$google->setTitle( "Google" );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$google->getTitle();
$google->getUrl();
?>

四、循环语句

(1)while只要指定的条件成立,则循环执行代码块

while (条件)
{
    要执行的代码;
}

(2)do…while : 首先执行一次代码块,然后在指定的条件成立时重复这个循环

do
{
    要执行的代码;
}
while (条件);

(3)for : 循环执行代码块指定的次数

for (初始值; 条件; 增量)
{
    要执行的代码;
}

初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。

注:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。

(4)foreach :根据数组中每个元素来循环代码块,foreach 循环用于遍历数组

foreach ($array as $value)
{
    要执行的代码;
}

每进行一次循环,当前数组元素的就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,将看到数组中的下一个值。

foreach ($array as $key => $value)
{
    要执行的代码;
}

每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数组指针会逐一地移动),在进行下一次循环时,将看到数组中的下一个键与值。

posted @ 2022-02-06 18:51  Hardworking666  阅读(81)  评论(0编辑  收藏  举报