-> 和 => 及 :: 用法
-> 用来引用对象的成员(属性和方法)
=> 自定义数组键名
:: 作用域限定操作符,用于访问静态、const、和类中重写的属性和方法
向浏览器输出数据
int print(arg); | 输出数据,可省略括号,返回值常为1 | |
echo | void echo(string arg1 [,... string argN]); | 输出数据,无返回值 |
printf | int printf(string format [, mixd args]); | 与C用法基本一致 |
sprintf | string sprintf(string format [,mixed args]) | 输出赋值给字符串 |
数据类型
标量数据类型
1.布尔型 boolean
2.整型 int
3.浮点型 float
4.字符串 string
复合数据类型
1.数组 array
2.对象 object
与类型有关的函数
函数 | 作用 | 返回值 |
string gettype(mixed var) | 获取类型 | |
boolean settype(mixed var , string type) | 转换类型 | 成功返回TRUE,否则返回FALSE |
类型标识符函数
函数 | 作用 | 返回值 |
boolean is_name(mixed var) | 判断类型是否符合 | 符合返回TRUE,否则返回FALSE |
1.is_nan 判断是否为合法数值
2.is_array — 检测变量是否是数组
3.is_writable — 判断给定的文件名是否可写
4.is_countable - 确认变量的内容是可数值
5.is_scalar — 检测变量是否是一个标量
6.is_executable — 判断给定文件名是否可执行
7.is_tainted - 检查字符串是否被污染
8.is_file — 判断给定文件名是否为一个正常的文件
9.is_resource — 检测变量是否为资源类型
10.is_dir — 判断给定文件名是否是一个目录
11.is_string — 检测变量是否是字符串
12.is_bool — 检测变量是否是布尔型
13.is_null — 检测变量是否为 NULL
14.is_float — 检测变量是否是浮点型
15.is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
16.is_numeric — 检测变量是否为数字或数字字符串
17.is_object — 检测变量是否是一个对象
18.is_int — 检测变量是否是整数
变量赋值
按值赋值
$color = 'red';
$numner = 12;
引用赋值
$value1 = 'hellow';
$value2 = &$value1; //$value1 和 $value2 都等于 "hellow"
$value2 = 'goodbye'; //$value1 和 $value2 都等于 "goodbye"
变量作用域
1.局部变量
2.函数参数
3.全局变量
4.静态变量
变量的变量
$var1 = 'var2';
$$var1 = 'aaa';
echo "$var1 $var2"; //var2 aaa
echo "$var1 ${$var1}"; //var2 aaa
魔术变量
__FILE__ : 文件的完整路径和文件名。
__LINE__ : 文本中的当前行号。
__DIR__ :文件所在当前目录。
__FUNCTION__:用在函数里面,返回函数的名字。
__CLASS__ :用在类里面,返回类的名字。
__NAMESPACE__:返回当前命名空间的名字。
超级全局变量
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
常量
define( ) | boolean define(string name ,mixed value [, bool case_insensitive]) | 定义常量,第三个参数若为 true 则对此常量引用时不区分大小写 |
const | / | php5.3.0以后可使用const关键字在类定义外部定义常量 |
字符串
' ' | 单引号不解析变量和转义序列 |
" " | 双引号解析变量和转义序列 |
大括号
输出中嵌入表示复杂数据类型的变量,这种语法更清晰
echo "The capital of the Ohio is {$capitals['ohio']}";
heredoc
会解析界定 heredoc中的文本
<?php
echo <<<EXCERPT
sometext...
EXCERPT;
?>
Nowdoc
不会解析界定在Nowdoc中的文本
<?php
echo <<<'EXCERPT'
sometext...
EXCERPT;
?>
控制结构
条件语句 | if | 用法与C中基本相同 |
else | ||
elseif | ||
switch | ||
循环语句 | while | 用法与C中基本相同 |
do...while | ||
for | ||
foreach | //循环处理数组 1. foreach (array_expr as $value){ } 2. foreach (array_expr as $key => $value){ } | |
break 和 goto | 用法与C中基本相同 | |
continue | 用法与C中基本相同 |
文件包含语句
include(path/to/filename); //可省略括号 启用allow_url_fopen可引用远程文件
include_once(filename); //确保文件只包含一次
require(filename); //与 include 区别:1. 条件语句中为false时仍然包含文件 2.出错时,脚本停止运行
require_once(filename); //与上一致
函数
创建函数方法与 JavaScript 相似
function functionName(parameters)
{
function-body
}
按引用传递参数
<?php
$cost = 20.99;
$tax = 0.05;
function calculateCost(&$cost,$tax)
{
$cost += 5;
$tax += 4;
}
calculateCost($cost,$tax);
printf("\$tax: %.2f\n",$tax); //0.05
printf("&\$cost: %.2f",$cost); //25.99
?>
默认参数值
//多个可选参数
function calculate($price, $price2="", $price3="")
{
echo $price + $price2 + $price3;
}
返回多个值
利用list()构造可以方便的从数组中获取值
//函数返回多个值
function reMulti()
{
$user[] = "a";
$user[] = "b";
$user[] = "c";
return $user;
}
list($a,$b,$c) = reMulti();
echo $a,$b,$c;
数组
创建数组
#****** 创建数组*****
//1.
$arr[0] = 'a';
$arr[1] = 'b';
//2.递增数值索引可省略
$arr1[] = 'a';
$arr1[] = 'b';
//3.关联数组
$arr2['a'] = 'aa';
$arr2['b'] = 'bb';
#****** array() 创建数组***
//1.创建索引数组
$arr3 = array('a','b','c');
//2.创建管理数组
$arr4 = array(
'a' => 'aa',
'b' => 'bb',
'c' => 'cc');
OOP
类
class ClassName
{
//属性声明
//方法声明
}
对象
根据预定义的类创建的对象称谓类的实例化
$obj = new className()
属性
调用属性 : $obj->attr ;
属性作用域
不声明作用域默认为 public
public: 公共作用域,可由对象直接操作和访问
private: 只能在类中被访问,类外部和子类不能访问
protected: 只能在类中和子类访问,类外部不能访问
final: 防止被子类覆盖
static: 静态作用域
class Demo
{
public $name;
private $name1;
protected $name2;
final $name3;
static $name4;
}
属性重载
//当时图引用一个类定义中不存在的成员变量时,就会自动调用这些方法
class ReAttr
{
var $attr = 1;
public $city;
//__set()方法设置属性
// boolean __set([string property_name],[mixed value_to_assign])
function __set($name , $value)
{
$this->$name = $value;
}
//__get()方法获取属性
// boolean __get([string property_name])
function __get($name)
{
echo '__get called!<br/>';
echo 'no such variable!';
}
}
$obj1 = new ReAttr();
echo $obj1->attr;
echo $obj1->name = 2; //2
echo $obj1->age; //__get called!
//no such variable!
常量
class ConstAttr
{
const E = '2.7182818284';
}
echo ConstAttr::E;
方法作用域
public: 公共作用域,可由对象直接操作和访问
private: 只能在类中被访问,类外部和子类不能访问
protected: 只能在类中和子类访问,类外部不能访问
abstract: 只在父类中声明,但在子类中实现
final: 防止被子类覆盖
static: 静态成员,不能实例化,在运行的时候自动在内存中开辟空间,不用在new
class Visitors //public 、 private 、 ...
{
public function demo_1()
{
echo 'demo';
}
private function demo_2()
{
echo 'demo';
}
//......
}
abstract class Employee //只有声明为 abstract 的类才能声明抽象方法
{ //如果想定义一个 API ,以后将他作为实现的一个模型,就可以声明一个抽象方法
abstract function hire();
abstract function fire();
//.......
}
构造和析构函数
class Book
{
function __construct() // 构造函数在对象实例化时自动执行
{
echo '__construct called!<br/>';
}
function __destruct() //析构函数在结束时调用
{
echo '__destruct called!<br/>';
}
}
class Manager extends Book
{
function __construct()
{
parent::__construct(); //调用父类构造函数
echo 'aaa<br/>';
}
}
new Manager;
静态类成员
class Visitor
{
private static $visitors = 0;
function __construct()
{
self::$visitors++; //静态属性和方法使用self关键字和类名来调用
}
public static function getVisitors()
{
return self::$visitors;
}
}
$visits = new Visitor;
echo Visitor::getVisitors().'<br/>'; //1
$visits1 = new Visitor;
echo Visitor::getVisitors().'<br/>'; //2
自动加载对象
当引用未在脚本中定义的类时会自动调用这个函数
//php7中已弃用 spl_autoload_register() instead
function __autoload($name)
{
require_once "$name.php";
}
高级OOP特性
对象克隆
语法: destinationObject = clone targetObject ;
__clone()方法会在克隆期间自动执行;
class Clon
{
private $var1;
private $var2;
function __clone()
{
$this->var1 = 'clone';
}
function setVar1($arg)
{
$this->var1 = $arg;
}
function getVar1()
{
return $this->var1;
}
function setVar2($arg)
{
$this->var2 = $arg;
}
function getVar2()
{
return $this->var2;
}
}
$c1 = new Clon;
$c1->setVar1('111');
$c1->setVar2('222');
echo $c1->getVar1() .'<br/>';
echo $c1->getVar2() .'<br/>';
echo '----- clone ------<br/>';
$c2 = clone $c1;
echo $c2->getVar1() .'<br/>';
echo $c2->getVar2() .'<br/>';
接口
interface Iusb
{
function mouse();
function keyboard();
}
interface Ibus
{
const Speed = 1333;
function pci($arg);
}
class Usb implements Iusb , Ibus //实现多个接口
{
function mouse()
{
echo 'mouse';
}
function keyboard()
{
echo 'keyboard';
}
function pci($arg)
{
echo $arg;
}
}
$dev = new Usb;
$dev->mouse(); //mouse
$dev->pci(Ibus::Speed); //1333
抽象类
abstract class Abs
{
var $a = 1;
function general()
{
echo 'genearl';
}
abstract function ext();
}
class Imp extends Abs
{
function __construct()
{
parent::general();
}
function ext()
{
echo 'implement ext';
}
}
new Imp;
命名空间
name_sp.php
<?php
namespace namesp;
class Imp
{
function __construct()
{
echo '<br/> name_sp.php Imp class <br/>';
}
}
?>
main:
require_once 'name_sp.php';
use namesp as sp;
$namesp = new sp\Imp;