PHP是一种创建交互性动态站点的强有力的服务器端脚本语言。Zend框架由于多样的功能、并且有一个广泛的支持系统,流行了很长时间。而CakePHP是一个晚于Zend的PHP框架,相应的支持系统也比较少,但是更为方便和易于使用
1 global 关键字用于函数内访问全局变量。
2 全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php $x=5; $y=10;
function myTest() {
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest();
echo $y; ?>
echo PHP_EOL; // 换行符
Static 作用域
<?php
echo <<<EOF <h1>我的第一个标题</h1> <p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
- 必须后接分号,否则编译通不过。
- 2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,
- echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
PHP var_dump() 函数返回变量的数据类型和值:
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
-
0 == false: bool(true) 0 === false: bool(false) 0 == null: bool(true) 0 === null: bool(false) false == null: bool(true) false === null: bool(false) "0" == false: bool(true) "0" === false: bool(false) "0" == null: bool(false) "0" === null: bool(false) "" == false: bool(true) "" === false: bool(false) "" == null: bool(true) "" === null: bool(false)
设置 PHP 常量
设置常量,使用 define() 函数
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
// 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
并置运算符 (.) 用于把两个字符串值连接起来。
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
strlen() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
中文下的字符在 UTF-8 下是 3 个字符长度,在 gbk 下是2个字符长度。 mb_strlen 设置指定编码输出中文字符个数:
echo mb_strlen("中文字符",'utf-8');
$str = "你好!!a"; echo strpos($str ,"!");这个 strpos() 只能用于判断字符在字符串中是否存在。
PHP7+ 版本新增整除运算符 intdiv()
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
PHP7+ 版本多了一个 NULL 合并运算符 ??
<?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 类似的三元运算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>
$c = $a <=> $b;组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
// 优先级: && > = > and
// 优先级: || > = > or $a = 3;
$b = false;
$c = $a or $b;
var_dump($c);
/ 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d);
$t=date("H");
if ($t<"20") { echo "Have a good day!"; }
自 PHP5.0 开始,用PHP获取系统时间时,时间比当前时间少 8 个小时。原因是 PHP.ini 中没有设置 timezone 时,PHP 是使用的 UTC 时间,所以在中国时间要少 8 小时
PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组
$cars = array (
array("Volvo",100,96),
array("BMW",60,59),
array("Toyota",110,100) );
$sites = array
(
"runoob"=>array
(
"菜鸟教程",
"http://www.runoob.com"
),
"google"=>array
(
"Google 搜索",
"http://www.google.com"
),
"taobao"=>array
(
"淘宝",
"http://www.taobao.com"
)
);
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
获取数组的长度 - count() 函数
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{ echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }
?>
“数组排序时发现 sort 与 rsort 排序完毕以后,var_dump 输出时原有 key 值丢失,变为数字索引。”
正解:对关联数组进行升序和降序排列应使用
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
PHP 超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST用于收集HTML表单提交的数据。
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
- $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目
echo $_SERVER['PHP_SELF']; echo "<br>";
echo $_SERVER['SERVER_NAME']; echo "<br>";
echo $_SERVER['HTTP_HOST']; echo "<br>";
echo $_SERVER['HTTP_REFERER']; echo "<br>";
echo $_SERVER['HTTP_USER_AGENT']; echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
PHP 中,提供了下列循环语句:
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块
使用for循环,实现冒泡排序:
<?php $arr = array(5,3,6,2,8,10); for($i = count($arr)-1;$i>=0;$i--){ for($j = 0 ; $j < $i ; $j++){ if($arr[$j+1] > $arr[$j] ){ $aa = $arr[$j+1]; $arr[$j+1] = $arr[$j]; $arr[$j] = $aa; } } } print_r($arr); ?>
<?php include ('conn.php'); //导入 function titleshow () { global $title; //php7 中如果不做声明,可能不能调用这个 titile 函数 echo $title; } titleshow(); ?>
__LINE__
文件中的当前行号。
__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
__FUNCTION__
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
__METHOD__
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
多个 trait 的情况:
通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。示例代码如下:
<?php trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } } $o = new MyHelloWorld(); $o->sayHello(); $o->sayWorld(); $o->sayExclamationMark(); ?>
最终输出:Hello World!