1.变量的管理
1.isset用来判断某个变量是否已经被php声明,返回一个布尔值,如果变量被定义,返回true 否则返回false 当变量被定义成null也返回false。同样可以检查某个数组中元素是否被设置。可以接受任意数量参数
isset($val1,$val2 ...) 但是只有全部被设置了才返回true
2.unset 取消定义之前的变量 如果没有其他变量引用的话会释放这个变量的内存空间。用inset检测unset的值返回false
3.empty 检测一个变量是否被声明或者是否为false
超全局变量
$_GET:一个包含所有php从客户浏览器收到的get变量
$_POST:一个包含所有php从客户浏览器收到的post变量
$_COOKIE:一个包含所有php从客户浏览器收的cookie的数组
$_ENV:一个包含环境变量的数组
$_SERVER:一个存放web环境变量的数组
2.转义
双引号变量回解析,单引号不会解析。双引号里面可以有转义,单引号不行
3.多态
class Cat {
function miau() {
print("miau");
}
}
class Dog {
function wuff() {
print("wuff");
}
}
function printResult($obj) {
if($obj instanceof Cat) {
$obj->miau();
} else if($obj instanceof Dog) {
$obj->wuff();
}else {
print("error:wrong object");
}
}
echo printResult(new Dog());
echo "<br>";
echo printResult(new Cat());
//下面是结果
wuff
miau
可以看出本例子不可以扩展,如果再加一个动物则必须改源码 所以用下面方法替换
建立一个父类,建立cry方法。再分别建立两个子类cat dog类并且也建立cry方法(对父类方法重写),再用一个实例函数判断对象,分流。这就保证方法的扩展性。加一个子类继承父类即可。而不必改源码
//定义一个父类
class Father {
function cry($arg) {
print($arg);
}
}
class Cat extends Father{
function cry() {
print("Cat");
}
}
class Dog extends Father{
function cry() {
print("Dog");
}
}
function printResult($obj) {
if($obj instanceof Cat) {
$obj->cry();
} else if($obj instanceof Dog) {
$obj->cry();
}else {
print("error:wrong object");
}
}
echo printResult(new Dog());
echo "<br>";
echo printResult(new Cat());
4.父类,子类中的parent:: self::
self:: 调用当前类的方法,属性
parent::调用父类的方法和属性
//父类
class Father {
const name = 'father';
public function __construct() {
print(self::name);
}
}
//子类
class child extends Father {
const name = 'child';
public function __construct() {
parent::__construct();
echo '<br>';
print(self::name);
}
}
$child = new child();
5.instanceof 操作符 判断类的逻辑二元运算符
class Father {
public $name = __CLASS__;
}
class Child extends Father {
public $name = __CLASS__;
}
class test {
public $name = __CLASS__;
}
function judge($obj) {
if(!($obj instanceof Father)) {
print($obj->name);
print(' is a father');
}
}
judge(new Child());
judge(new test());
6.toString方法(里面是return的值)
class Person {
private $name;
function __construct($name) {
$this->name = $name ;
}
function __toString() {
return $this->name;//一定要return值 调用类的时候后返回
}
}
$obj = new Person('mmy family');
print($obj);
7.try catch exception 必须继承exception 类
class NullHandleException extends Exception {
function __construct($message) {
parent::__construct($message);
}
}
function printObj($obj) {
if($obj == null) {
throw new NullHandleException("print Object received null object");
}
print($obj.'<br>');
}
class MyName {
private $name;
function __construct($name) {
$this->name = $name;
}
function __toString() {
return $this->name;
}
}
try {
printObj(new MyName("boss"));
printObj(NULL);
printObj(new MyName("jone"));
} catch(NullHandleException $e) {
print $e->getMessage().'<br>';
print "in file " . $e->getFile().'<br>';
print "on line " . $e->getLine();
}
//结果是
boss
print Object received null object
in file /mnt/hgfs/www/test/class.php
on line 269
8.__autoload 自动载入
MyClass.php
class MyClass {
function hello() {
print "hello my friend ";
}
}
general.inc
function __autoload($class_name) {
// echo$_SERVER["DOCUMENT_ROOT"]."/classes/".$class_name.".php";
require_once($_SERVER["DOCUMENT_ROOT"]."/classes/".$class_name.".php");
}
main.php
require_once('general.inc');
$class = new MyClass();
echo 'hello';exit;
$class->hello();
//__autoload 主动调用class自动加载(载入)
**
给程序员一个鼓励呗!
**
- 微信
- 支付宝
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。