金键盘
发布于 2025-03-11 / 6 阅读
0

20 php变量和常量

变量

这个是变量示例,注意自己声明的变量需要注意生效作用域

<?php
//变量名由字母(A-Z、a-z 或 128 到 255 之间的字节)或者下划线开头
$var = '100'; //变量声明
echo $var . "<br>";
$var = '200'; //变量重新赋值
echo $var . "<br>";

function fun1()
{
    echo $var;  // *** 会报错,找不到外面变量范围的 $var ***
}

function fun2()
{
    global $var;
    echo $var;  //不报错,通过 global $var; 语法可以声明外面有 $var
}
?>

预定义全局变量

php自身提供了一些变量,但是这些变量是全局性的,在函数内部也能用,任何php里面都可以用。也叫全局变量,超全局变了,php预定义变量。列表如下

$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV

php还有$http_response_header变量,这个变量需要file_get_content来获取才填充,并且在外部范围里面是不能用的,还是需要重新file_get_content
例如

<?php
function get_contents() {
  file_get_contents("http://example.com");
  var_dump($http_response_header); // 变量在本地作用域中填充
}
get_contents();
var_dump($http_response_header); // 调用 get_contents() 不会在函数作用域之外填充变量
?>

另外,php.exe直接运行某个php文件的时候,可以带参数,但是需要php.ini打开register_argc_argv = On,其中register_argc_argv前面的;分号需要去掉,后面不要带分号。这个参数可以通过$argc获取参数个数,$argv获取参数数组。例如

php index.php 100 200

<?php
echo '$argc=' . $argc . ' ' . $_SERVER['argc'] . "<br>";
?>

自己声明全局变量

(效果和预定义全局变量作用于类似,并且可以跨多个php生效)。注意这个所谓全局只在一次请求中可以跨多个变量域和多个php生效,一旦重新请求,所谓的自己定义的全局变量是回复状态,需要重新赋值的。



<?php  
$message = "Hello, world!";  

function changeMessage() {  
    $GLOBALS['message'] = "Hello from function!";  
}  

changeMessage();  
echo $message; // 输出: Hello from function!  

?>  

获取客户端发送来的变量

<form action="submit.php?mygetvar=300" method="POST">
    名字:  <input type="text" name="username"><br />
    体重: <input type="text" name="weight"><br />
    <input type="submit" name="submit" value="提交!" />
</form>

在submit.php里面可以通过$GET, $POST, $REQUEST来获取变量,其中$REQUEST是$GET, $POST, $COOKIE等多次地方的值的混合,不要用$REQUEST来编程,容易混淆。

<?php
echo $GET['mygetvar'];
echo $POST['username'];
echo $POST['weight'];
?>

还可以用COOKIE功能跨多次请求保存变量状态

//下面代码设置Cookie1变量(值为'AAA'), 设置Cookie2变量(值为数组['BBB', 'CCC']),变量范围是1个小时
setcookie("MyCookie1", 'AAA', time()+3600);
setcookie("MyCookie2[a]", 'BBB', time()+3600);
setcookie("MyCookie2[b]", 'CCC', time()+3600);
//下面代码设置的是会话cookie,关掉浏览器或者裸输URL都会失效。(关键是第三个生效时间参数不要传值)
setcookie("MyCookie4", "AAA"); // 或者:setcookie("MyCookie1", "AAA", 0);  
setcookie("MyCookie5[a]", "BBB");  
setcookie("MyCookie5[b]", "CCC");  

读取的时候可以这样

<?php
echo $_COOKIE['MyCookie1']; //值是字符串
print_r($_COOKIE['MyCookie5']); //值是数组

常量的使用

function a(...$values)
{
    $all = '';
    foreach ($values as $value) {
        $ret = print_r($value, true);
        if (strlen($all) > 0)
            $all .= ' ';
        $all .= $ret;
    }
    $all .= '<br>';
    echo $all;
}

// 常量语法有const方法和define()方法
//const方法,(注意const语法只能容纳 string、int、float、bool四种值)
const MyConst1 = 'Hello World';
//define()方法,可以容纳计算的表达式值、数组、符合类型等
define('MyConst2', 300);
define('MyConst3', 'World Hello');
define('MyConst4', array('A', 'B', 'C'));

a('MyConst1', MyConst1);
a('MyConst4', MyConst4);
a('MyConst4[0]', MyConst4[0]);

输出

MyConst1 Hello World
MyConst4 Array
(
    [0] => A
    [1] => B
    [2] => C
)

MyConst4[0] A