php
1. 超全局变量
$_SERVER 是一个特殊的 PHP 保留变量,它包含了 web 服务器提供的所有信息,被称为超全局变量。是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。
如:
<?php
echo $_SERVER['HTTP_USER_AGENT'];
echo $_SERVER['SERVER_ADDR'];
?>
2. 函数
2.1 基本语法
<?php
function foo($arg_1, $arg_2, ..., $arg_n){
echo "Example function.\n";
return $retval;
}
?>
2.2 有条件的函数
<?php
$makefoo=true;
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
//只能随着$makefoo的状态而选择性地调用
?>
2.3 内嵌函数
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* We can't call bar() yet
since it doesn't exist. */
foo();
/* Now we can call bar(),
foo()'s processesing has
made it accessable. */
bar();
?>
<?php
// PHP 中的所有函数和类都具有全局域,可以在内部定义外部调用,反之亦然。
// PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。
// 函数名是非大小写敏感的,不过在调用函数的时候,通常使用其在定义时相同的形式。
?>
2.4 递归函数
<?php
//不应超过100-200层
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
3. include_once()
<?php
//避免多次include
include_once("a.php"); // this will include a.php
include_once("A.php"); // this will include a.php again on Windows! (PHP 4 only)
?>
4. 函数的参数
4.1 通过引用传递参数
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // outputs 'This is a string, and something extra.'
?>
4.2 默认参数
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee("espresso");
//PHP 还允许使用数组和特殊类型 NULL 作为默认参, 默认值必须是常量表达式, 请注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧, 自 PHP 5 起,默认值可以通过引用传递。
?>
4.3 可变长度参数列表
PHP 4 及更高版本已经在用户自定义函数中支持可变长度参数列表。这个真的很简单,用 func_num_args(),func_get_arg(),和 func_get_args() 函数。
5. 返回值
值通过使用可选的返回语句返回。任何类型都可以返回,其中包括列表和对象。
<?php
//返回数组
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
<?php
//返回引用,注意函数定义时的"&"
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
6. 引用
6.1 what is 引用
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身――变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的 hardlink。
//很像c++中的引用
6.2 引用不是什么
引用不是指针,而是别名。
6.3 引用的传递
<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a is 6 here
//注意在函数调用时没有引用符号――只有函数定义中有。
/*
以下内容可以通过引用传递:
* 变量,例如 foo($a)
* New 语句,例如 foo(new foobar())
* 从函数中返回的引用
任何其它表达式都不能通过引用传递,结果未定义。
*/
?>
6.4 从函数中返回的引用
<?php
function &find_var($param)
{
/* ...code... */
return $found_var;
}
$foo =& find_var($bar);
$foo->x = 2;
// Note: 和参数传递不同,这里必须在两个地方都用 & 符号――指出返回的是一个引用,而不是通常的一个拷贝,同样也指出 $foo 是作为引用的绑定,而不是通常的赋值。
// 用处不太大
?>
6.5 引用定位
6.5.1
<?php
$var='welcome';
function a(){
global $var; //里面的$var是外面的引用,别名,尽管名字一样,但范围不同
$var =& $GLOBALS["var"];
//等同
}
?>
6.5.2
<?php
$this
//在一个对象的方法中,$this 永远是调用它的对象的引用。
?>
7. 类型
7.1 种类
PHP 支持八种原始类型。
四种标量类型:
* boolean(布尔型)
* integer(整型)
* float(浮点型,也作“double”)
* string(字符串)
两种复合类型:
* array(数组)
* object(对象)
最后是两种特殊类型:
* resource(资源)
* NULL
7.2 检测
如果想查看某个表达式的值和类型,用 var_dump()。 如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。要查看某个类型,不要用 gettype(),而用 is_type 函数。
<?php
$bool = TRUE; // a boolean
$str = "foo"; // a string
$int = 12; // an integer
echo gettype($bool); // prints out "boolean"
echo gettype($str); // prints out "string"
// If this is an integer, increment it by four
if (is_int($int)) {
$int += 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($bool)) {
echo "String: $bool";
}
?>
7.3 boolean型
要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写。
<?php
$foo = true; // assign the value TRUE to $foo
$foo2 = false;
?>
当转换为 boolean 时,以下值被认为是 FALSE:
* 布尔值 FALSE
* 整型值 0(零)
* 浮点型值 0.0(零)
* 空白字符串和字符串 "0"
* 没有成员变量的数组
* 没有单元的对象(仅适用于 PHP 4)
* 特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源)。
<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>
8. 类
8.1 简单的类定义
<?php
class SimpleClass
{
// 成员声明
public $var = 'a default value';
// 方法声明
public function displayVar() {
echo $this->var;
}
}
?>
<?php
class SimpleClass
{
// 无效的类成员定义:不能以表达式为默认值
public $var1 = 'hello '.'world';
public $var2 = <<<EOD
hello world
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
// 正确的类成员定义:
public $var6 = myConstant;
public $var7 = self::classConstant;
public $var8 = array(true, false);
}
?>
8.2 使用
<?php
$instance = new SimpleClass();
?>
8.3 对象赋值
<?php
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
输出为:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
8.4 继承
extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。
<?php
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>
8.5 构造函数
如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法,但它却又不是构造函数。
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
8.6 析构函数,也支持
8.7 访问控制
对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。
8.7.1 对类成员的访问控制
类成员都必须使用关键字public、protected 或 private 进行定义, 不能省略
8.7.2 对方法的访问控制
类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
8.8 :: 操作符
表态成员与方法,明确调用父类被覆盖的方法
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// 覆盖父类中的方法
public function myFunc()
{
// 但仍然可以调用已被覆盖的方法
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
8.9 stitic
<?php
class Foo {
public static $name="jack";
public static function aStaticMethod() {
// ...
}
}
Foo::$name;
Foo::aStaticMethod();
?>
8.10 constant in class
不可改变的表态值
<?php
class MyClass
{
const constant = 'constant value'; //不用带"$"
function showConstant() {
echo self::constant . "\n";
}
}
echo MyClass::constant . "\n";
$classname = "MyClass";
echo $classname::constant . "\n";
$class = new MyClass();
$class->showConstant();
echo $class::constant."\n";
?>
9. mysql 使用
9.1 连接,查询
<?php
// 连接,选择数据库
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not select database');
// 执行 SQL 查询
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
// 用 HTML 显示结果
echo "\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t\n";
foreach ($line as $col_value) {
echo "\t\t$col_value | \n";
}
echo "\t \n";
}
echo " \n";
// 释放结果集
mysql_free_result($result);
// 关闭连接
mysql_close($link);
?>
9.2 sql 语句与php语句混用
<?php
"select count(*) from table_log where time_log >= '".$_POST["startTime"]."' and time_log <= '".$_POST["endTime"]."' and action='".$_POST["operation"]."'";
//变量要放入''中
?>
10. 数组中的最大最小值
<?php
$arr=array(4, 5, 10, 34);
echo max($arr);
echo min($arr);
?>
11. 获取随机日期
<?php
function getRandDT(){
$hour=rand(10, 23);
$month=rand(10, 12);
$day=rand(10, 30);
$dt="2008-".$month."-".$day." ".$hour.":00:00";
return $dt;
}
?>
12. session 的使用
<?php
session_start(); //要写在没有输出的靠前部分
$_SESSION["varName"]; //以这样的形式去赋值或读取
unset($_SESSION['varName']); //unset特定的session
session_unset(); //unset所有的session
session_destroy(); //remove所有的session,一般用于logout
?>
13. 日期加减
<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
//Note: 由于夏令时的缘故,这种方法比简单地在时间戳上加减一天或者一个月的秒数更可靠。
?>
14. 日期与时间
14.1 format
<?php
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 "12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"
?>
14.2 有用的应用
14.2.1 strtotime()
<?php
//将任何英文文本的日期时间描述解析为 UNIX 时间戳
?>
|