PHP中的 变量和数据类型,动态变量使用,常量的定义和使用
变量
变量在任何计算机的语言中都会占据一段内存,包含着一些信息。变量是计算机最基础的一部分,你可以在PHP中使用$声明一个变量,例如 $myVariable 。
如下有使用示例:
<?php
$str = "hello";
$num = 5;
echo $str;
echo " "; // Output: hello
echo $num; // Output: 5
?>
数据类型
随着变量类型的不同,他们的大小也会不一样。在c语言中,你可以对你的数据使用不同的数据类型。然而PHP对于数据类型的界限是模糊的,但PHP中的数据类型在创建时被自动赋予。
那么有哪些数据类型呢?
- null
- boolean
- integer
- float
- string
- object
- resource
- array
Null
mull可以被赋值给任何变量,它代表变量为空值。
<?php
$foo = null;
?>
Boolean
这种数据类型只有两种值true和false
和c语言一样,控制程序的进程,用在if和while中
<?php
$foo = true;
if ($foo) {
echo "true";
} else {
echo "false";
}
Integer
一个整形可以是正数或者负数,可以被用于任何进制的数字。整型的大小由平台决定,PHP不支持无符号整型。
<?php
$negative = -3; // 负数
$zero = 0; // 0,可以是null或者负数
$positive = 123; // 正数
$zeroPos = 0123; //0标识8进制
$hex = 0xAB; //0x表示16进制
$bin = 0b1010; // 0b 表示2进制
?>
Float
浮点数,“double”或简称为“float”,是十进制数。
<?php
$foo1 = 1.23;
$foo2 = 10.0;
$bar1 = -INF; // 负无穷
$bar2 = NAN; // NAN 表示不是一个数字
?>
Array
数组就像一个列表,最开始的索引值为0
<?php
$foo = array(1, 2, 3); // 数组函数
$bar = ["A", true, 123 => 5]; // PHP5.4以上,使用短句法,这里定义了三个元素
echo $bar[0]; // 返回 A
echo "\n";
echo $bar[1]; // 返回true
echo "\n";
echo $bar[123]; // 返回5
// echo $bar[1234]; //返回error
?>
数组也可以被一个关键词索引,比如
<?php
$array = array();
$array["foo"] = "bar";
$array["bar"] = "quux";
$array[42] = "hello";
echo $array["foo"]; //输出 "bar"
echo "\n";
echo $array["bar"]; // 输出 "quux"
echo "\n";
echo $array[42]; // 输出"hello"
?>
String
字符串就像一个字符数组。像数组一样,可以为字符串建立索引以返回其各个字符:
<?php
$foo = "I am a string";
echo $foo; // 输出"I am a string"
echo "\n";
echo $foo[3]; // 打印 'm'
?>
可变变量
把变量名转化为动态变量,可以把$放置在变量名之前
<?php
$var='hello';
$$var='world';
echo $$var; //输出world
?>
还有一种连接的方式
<?php
$fooBar = 'baz';
$varPrefix = 'foo';
echo "$fooBar:\t\t\t\t";
echo $fooBar; // 输出 "baz"
echo"\n";
echo "${$varPrefix . 'Bar'}:\t\t"; //.将foo与Bar连接起来,相当于fooBar
echo ${$varPrefix . 'Bar'}; // 输出 "baz"
?>
常量
根据定义,常量是在脚本执行期间无法修改的变量。它们是使用const语句或define函数创建的。
PHP中通常使用大写单词表示常量
<?php
const PI = 3.14; // 浮点数
define("EARTH_IS_FLAT", false); //boolean
const UNKNOWN = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer
const APP_LANGUAGES = ["de", "en"]; // arrays
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays
?>
新定义常量时,可以使用之前定义过的常量
<?php
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV));
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES;
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"],BETTER_APP_LANGUAGES));
?>
但你不能使用函数
<?php
const TIME = time(); // 错误
?>
保留字
一些常量名称由PHP保留,无法重新定义
检查是否被define
定义的函数并不关心常量的值;它只在乎常量是否存在。即使常量的值为null或false,该函数仍将返回true。
以下代码显示了如何使用定义的函数检查常量GOOD和AWESOME是否存在。
<?php
define("GOOD", false);
if (defined("GOOD")) {
echo "GOOD is defined.\n" ; // prints "GOOD is defined"
if (GOOD)
echo "GOOD is true." ;
else
echo "GOOD is false."; //打印这个
}
if (!defined("AWESOME")) {
define("AWESOME", true); // 如果没定义,现在定义
}
?>
得到所有的定义常量
要获取所有定义的常量,包括由PHP创建的常量,请使用PHP函数get_defined_constants。以下代码段显示了如何完成此操作
<?php
$constants = get_defined_constants();
var_dump($constants); // 这个表单会很长
?>
要仅获取应用定义的常量,请在脚本的开头和结尾处调用函数(通常在引导过程之后)。看一下以下代码片段:
<?php
$constants = get_defined_constants();
define("HELLO", "hello");
define("WORLD", "world");
$new_constants = get_defined_constants();
$myconstants = array_diff_assoc($new_constants, $constants); //比较Key和value,返回不同
var_export($myconstants); //打印
?>
输出为:
array ( ‘HELLO’ => ‘hello’, ‘WORLD’ => ‘world’, )
在上述代码的第5行中,我们使用了PHP的array_diff_assoc函数。此函数采用两个参数,比较两者的键和值并返回差值。在这种情况下,它将返回所有新定义的常量。
使用常量的方法
<?php
//definition
define("EARTH_IS_FLAT", false); // boolean
define("APP_ENV_UPPERCASE", "DEV"); // string
//usage
if (EARTH_IS_FLAT)
echo "Earth is flat.\n";
else
echo "Earth is round.\n";
echo APP_ENV_UPPERCASE;
?>
如果你不不使用常量名,还可以这样使用
<?php
//definition
define("EARTH_IS_FLAT", false); // boolean
define("APP_ENV_UPPERCASE", "DEV"); // string
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";
if (constant($const1))
echo "Earth is flat.\n";
else
echo "Earth is round.\n";
echo constant($const2);
?>