1. 单引号,双引号
当双引号中包含变量时,变量会与双引号中的内容连接在一起;
当单引号中包含变量时,变量会被当做字符串输出。
<?php
$world= "world";
$str1 = "Hello, $world"; //Hello, world
$str2 = 'Hello, $world'; //Hello, $world
echo $str1;
echo "<br />";
echo $str2;
?>
2. 常量如何取值
获取常量值的有两种方法取值。
第一种是使用常量名直接获取值;例如计算圆周率的面积,如下:
<?php
define("PI",3.14);
$r=1;
$area = PI*$r*$r; //计算圆的面积
?>
第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:
mixed constant(string constant_name)
第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)
<?php
$p="";
//定义圆周率的两种取值
define("PI1",3.14);
define("PI2",3.142);
//定义值的精度
$height = "中";
//根据精度返回常量名,将常量变成了一个可变的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area = constant($p)*$r*$r;
echo $area;
?>
3. PHP引用(&)
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址。
详细文章:PHP引用(&)使用详解、PHP手册
4. 魔术变量
__CLASS__ //返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__DIR__ //文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FILE__ //返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
__FUNCTION__ //返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__LINE__ //返回文件中的当前行号。
__NAMESPACE__ //当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
__METHOD__ //返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__STATIC__ //当你调用class的静态方法时,返回class名称,区分大小写。如果在继承中调用的话,不管在继承中有没有定义,都能返回继承的class名。
5. 魔术函数
__construct() //实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
__destruct() //当删除一个对象或对象操作终止时被调用。
__call() //对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。
__get() //读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
__set() //设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。
__toString() //打印一个对象的时被调用。如echo $obj;或print $obj;
__clone() //克隆对象时被调用。如:$t=new Test();$t1=clone $t;
__sleep() //serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
__wakeup() //unserialize时被调用,做些对象的初始化工作。
__isset() //检测一个对象的属性是否存在时被调用。如:isset($c->name)。
__unset() //unset一个对象的属性时被调用。如:unset($c->name)。
__set_state() //调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
__autoload() //实例化一个对象时,如果对应的类不存在,则该方法被调用。
6. Session和Cookie的区别
7. Apache和Nginx的区别
Nginx 和 Apache 各有什么优缺点
Nginx实践一:centos apache更换为nginx
8. PHP命名空间
9. fastcgi与php-fpm的关系
详细文章:搞不清FastCgi与PHP-fpm之间是个什么样的关系、什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
10. 类的静态属性、静态方法
静态属性 | 静态方法 | |
---|---|---|
a)不需要实例化能够使用 | 是 | 是 |
b)访问方式 | 在静态属性和方法的名称前加上操作符”self::” | “self::”、实例化后”->” |
c)可以通过“->”操作符访问 | 否 | 是 |
a)静态属性和静态方法不需要在类被实例化的情况下可以直接使用,不是静态的则一定得实例化类;
b)可以通过在该静态属性和方法的名称前加上操作符”self::”,实现在同一类的成员方法中访问静态属性和方法;
c)静态属性不可以由实例化的对象通过 -> 操作符来访问(但静态方法可以);
d)静态在读到这个类或者引入这个类文件的时候,就已经实例化并存放到内存中了,非静态类则需要new一下。
详细文章:类和对象:静态属性、静态方法、Static(静态)关键字
11. 类方法里->和::的区别
-> | :: | |
---|---|---|
a)需要实例化才能使用 | 是 | 否 |
b)能访问静态属性 | 否 | 是 |
b)能访问静态方法 | 是(需要实例化) | 是 |
12. self、this的区别
self | this | |
---|---|---|
能在静态函数里使用 | 是 | 否 |
可访问的类变量和方法由 | self:: | $this-> (注意:PHP > 5.3 允许由 $this 使用静态变量,用 $this::$foo 。 $this->foo 将仍然没有被定义,如果 $foo 是一个静态变量.) |
需要一个实例对象 | 否 | 是 |
详细文章:PHP中self和this的用法区别
13. require、require_once和include、include_once的区别
require
的使用方法如 require(“file.php”); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include
使用方法如 include(“file.php”); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
require_once()
语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
include_once()
语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。
详细文章:require(),include(),require_once()和include_once()之间的区别
14. Linux如何输出文件最后10行,PHP如何输出文件最后10行
Linux下,输出前十行可以用 head -10 文件名
,输出后十行可以用 tail -10 文件名
:
// Linux:
[root@localhost sendmail]# tail -n 10 sendmail.html
<br>
<a href="#">4</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
// PHP代码:
exec("tail -n 10 sendmail.html", $output);
echo "<pre>";
var_dump($output);
// 执行PHP代码
[root@localhost sendmail]# /usr/bin/php do_queue.php
<pre>array(10) {
[0]=>
string(32) " <br>"
[1]=>
string(45) " <a href="#">4</a>"
[2]=>
string(29) " </td>"
[3]=>
string(25) " </tr>"
[4]=>
string(24) " </table>"
[5]=>
string(17) " </td>"
[6]=>
string(13) " </tr>"
[7]=>
string(12) " </table>"
[8]=>
string(7) "</body>"
[9]=>
string(7) "</html>"
}
15. 备忘函数
1)file_put_contents — 将一个字符串写入文件
$file = 'log.php';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个
$content = "第一次写入的内容\n";
if($f = file_put_contents($file, $content,FILE_APPEND)){ // 这个函数支持版本(PHP 5)
echo "写入成功。<br />";
}
2)mb_strlen — 获取字符串的长度(多字节的字符被计为 1)
//strlen会把每个中文计数为3,因为每个中文占3个字节
echo strlen("你好,世界!"); //输出18
echo mb_strlen("你好,世界!"); //输出6
3)mb_substr — 获取字符串的部分
// string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
// str: 从该 string 中提取子字符串。
// start: str 中要使用的第一个字符的位置。
// length: str 中要使用的最大字符数。 If omitted or NULL is passed, extract all characters to the end of the string.
// encoding: encoding 参数为字符编码。如果省略,则使用内部字符编码。
echo mb_substr("你好,世界!", 0, 4); //输出“你好,世”
echo substr("你好,世界!", 0 ,4); //你�
4)round — 获取字符串的部分
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
5)number_format — 获取字符串的部分
echo number_format(123456, 2, '.', ''); // 123456.00
echo number_format(123456, 2, '.', ','); // 123,456.00
echo number_format(123456, 2, ',', ' '); // 123 456,00