PHP学习笔记(二)

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);
?>

发表评论