您好,欢迎访问一九零五行业门户网

周一干不干活-PHP+MySQLi

hi
本来是雄心壮志的要干活的,哪知天有不测,早上大阴天起不来,中午又回寝室折腾衣服(做女工啊,牛不牛)没睡午觉,这样的迷糊状态,怎么科研,写这个好了。
1、php的oop编程
4.7 多态
--定义
由于接口的方法实现有多种多样,这种特性称之为多态
--栗子
function eat($obj){
if($obj instanceof icaneat){
$obj->eat(food); // 不需要知道到底是human还是animal,直接吃就行了
}else{
echo can't eat!\n;
}
}
$man = new human();
$monkey = new animal();
// 同样的代码,传入接口的不同实现类的时候,表现不同。这就是为什么成为多态的原因。
eat($man);
eat($monkey);
--小结
/**
* 多态
* 1. 只要某个对象实现了接口(instanceof),就可以直接在对象上调用接口的方法
*/
4.8 抽象类
--问题
连接接口的类,某些方法都是相同的,那么是否能够允许类中不实现,而是在接口中实现。
比如,人和动物吃东西不同,但呼吸相同。
--栗子
abstract class acaneat{ //关键字改变
abstract public function eat($food);//需要类自行实现的,前面加上abstract关键字
public function breath(){
echo breath use the air.
;
}
}
class human extends acaneat{ //实现接口用implenments,这里用extends
public function eat($food){
echo human eating .$food.
;
}
}
class animal extends acaneat{ //实现接口用implenments,这里用extends
public function eat($food){
echo animal eating .$food.
;
}
}
$xiaoming=new human();
$xiaohei=new animal();
$xiaoming->breath();$xiaoming->eat(food);
$xiaohei->breath();$xiaohei->eat(shit);
--小结
/**
* 抽象类
* 1. 抽象类允许类里面的部分方法暂时没有具体实现,这些方法我们成为抽象方法
* 2. 一旦类里面有抽象方法,这个类就必须是抽象类
* 3. 抽象类跟接口一样,不能直接实例化为对象
*/
五、魔术方法
5.1 简介
注意所有的魔术方法前面都是两个下划线__
php中的oop特有的。
比如构造函数和析构函数。
5.2 __tostring()和__invoke()
--定义
__tostring(),当对象被当作string使用时,这个方法会被自动调用;echo $obj;
__invoke(),当对象被当作方法(函数)调用时,这个方法被自动调用;$obj(4);
--栗子
/*
* tostring()魔术方法
* invoke()魔术方法
*/
class magictest{
public function __tostring(){
return this is the class magictest.;
}
public function __invoke($x){
echo
.$x;
}
}
$obj=new magictest();
echo $obj;
$obj(5);
用法和构造函数析构函数类似。比较自动化(自动调用,即使没有声明也会调用),但同时比较容易出错,小心。
5.3 __call()和__callstatic()或重载(overloading)
--定义
当对象访问不存在的方法名称时,__call()会被自动调用;
当对象访问不存在的静态方法名称时,__callstatic()会被自动调用;
这两个方法,又称为重载(不同于重写);通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现
--栗子
runtest(para1,para2);
$obj::runtest(para3,para4);
注意这里要求定义方法的时候格式是固定的。
5.4 __get()__set()__isset()__unset
--定义
这几个方法也被称为属性重载的魔术方法。
__set(),在给不可访问属性(一种是属性未定义,另一种是没有访问权限,如private)赋值时调用;
__get(),读取不可访问属性的值时调用;
__isset(),当对不可访问属性调用isset()或empty()时调用;
__unset(),。。。。。。。。。unset()。。。。。。。。。。
--栗子
runtest(para1,para2);
$obj::runtest(para3,para4);
echo $obj->classname;
$obj->classname=shit;
echo isset($obj->classname).
;
unset($obj->classname);echo
;
echo empty($obj->classname).
;
结果是
this is the class magictest.
5
calling runtest with parameters: para1,para2
static calling runtest with parameters: para3,para4
getting the property classname
setting the property classname to value shit.
__isset invoked
1
unsetting protery classname
__isset invoked
可以看到,其实isset和empty调用__isset时一对相反的操作。
然后,__set($name,$value)和__unset($name)是一对相反的操作,但所要元素不一样;
__isset($name),__get($name)都只需要名字(记住每个魔术方法的作用,理解了,就好记了)。
5.5 __clone()
--定义
就是克隆,或克隆
--栗子
先给出clone关键字的用法。
name='james';
echo $james->name.
;
$kobe=clone $james;
$kobe->name='kobe';
echo $kobe->name;
clone后的,就是个单独的对象,对其操作不影响原对象。
加上__clone()
name=shit;
}
}
$james=new nbaplayer();
$james->name='james';
echo $james->name.
;
$kobe=clone $james;
echo $kobe->name.
;
$kobe->name='kobe';
echo $kobe->name.
;
一般来说,用处在于clone后的初始化;或者说,当复制后,不想透露的某些信息的掩盖。
在工作中常用到这一个,因为常有对某个对象的操作,又不想影响原有数据,就克隆/复制一个出来。
----------------------------------------
2、mysqli扩展
一、安装及下载
1.1 优势及简介
更新更好,php5及以后推荐使用(或者pdo)。
--优点
基于oop和面向过程的使用;
支持预处理语句;
支持事务。
--其他
速度更快。安全性更好
1.2 安装及配置
--安装
配置php,开启php_mysqli.dll;
配置extension_dir='ext目录位置';
重启服务器。
(我用的是wamp,直接打对勾就行)
--验证
/*
* 验证mysqli是否开启
*/
//phpinfo();
//2.检测扩展是否已经加载
var_dump(extension_loaded('mysqli'));
var_dump(extension_loaded('curl'));
echo '
';
//3.检测函数是否存在
var_dump(function_exists('mysqli_connect'));
echo '';
//4.得到当前已经开启的扩展
print_r(get_loaded_extensions());
echo '';  
---
困了,回去洗洗睡觉。。。
其它类似信息

推荐信息