PHP周六干不做事-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.<br/>”;
}

}

class Human extends ACanEat{ //达成接口用implenments,那里用extends
public function eat($food){
echo “Human eating “.$food.”<br/>”;
}
}

class Animal extends ACanEat{
//实现接口用implenments,那里用extends
public function eat($food){
echo “Animal eating “.$food.”<br/>”;
}
}

$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);

–栗子

<?php
/*
* tostring()魔术点子
* invoke()魔术点子
*/

class MagicTest{
public function __toString(){
return “This is the class magictest.”;
}
public function __invoke($x){
echo “<br/>”.$x;
}
}
$obj=new MagicTest();
echo $obj;

$obj(5);

用法和构造函数析构函数类似。相比自动化(自动调用,就算没有注明也会调用),但与此同时相比较易于失误,小心。

5.3 __call()和__callStatic()或重载(overloading)

–定义

当对象访问不设有的主意名称时,__call()会被活动调用;

当指标访问不设有的静态方法名称时,__callStatic()会被活动调用;

那多个措施,又称之为重载(分歧于重写);通过这多个艺术,同多少个主意的名号的调用能够对应不一样的法门完结

–栗子

<?php
/*
* tostring()魔术点子
* invoke()魔术点子
*/

class MagicTest{
public function __toString(){
return “This is the class magictest.”;
}
public function __invoke($x){
echo “<br/>”.$x.”<br/>”;
}
public function __call($name,$arguments){
//__call的格式是定位的,第①个是措施名,第3个是措施内的参数

echo “Calling “.$name.” with parameters: “.implode(“,”,
$arguments).”<br/>”;
}
public static function __callstatic($name,$arguments){ 
echo “Static calling “.$name.” with parameters: “.implode(“,”,
$arguments).”<br/>”;
}
}
$obj=new MagicTest();
echo $obj;

$obj(5);

$obj->runTest(“para1″,”para2”);
$obj::runTest(“para3″,”para4”);

在意那里要求定义方法的时候格式是稳定的。

5.4 __get()__set()__isset()__unset

–定义

那多少个点子也被称作属性重载的魔术点子。

__set(),在给不行访问属性(一种是性质未定义,另一种是从未访问权限,如private)赋值时调用;

__get(),读取不可访问属性的值时调用;

__isset(),当对不可访问属性调用isset()或empty()时调用;

__unset(),。。。。。。。。。unset()。。。。。。。。。。

–栗子

<?php
/*
* tostring()魔术点子
* invoke()魔术点子
*/

class MagicTest{
public function __toString(){
return “This is the class magictest.”;
}
public function __invoke($x){
echo “<br/>”.$x.”<br/>”;
}
public function __call($name,$arguments){
//__call的格式是永恒的,第3个是艺术名,第一个是格局内的参数
echo “Calling “.$name.” with parameters: “.implode(“,”,
$arguments).”<br/>”;
}
public static function __callstatic($name,$arguments){
echo “Static calling “.$name.” with parameters: “.implode(“,”,
$arguments).”<br/>”;
}
public function __get($name){ //get要有name
return “Getting the property “.$name.”<br/>”;
}
public function __set($name,$value){ //set要有名有值
echo “Setting the property “.$name.” to value “.$value.”.<br/>”;
}
public function __isset($name){ //判断是不是定义了品质
echo “__isset invoked<br/>”;
return true;
}
public function __unset($name){ //撤销
echo “unsetting protery “.$name.”<br/>”;
return true;
}
}
$obj=new MagicTest();
echo $obj;

$obj(5);

$obj->runTest(“para1″,”para2”);
$obj::runTest(“para3″,”para4”);

echo $obj->classname;
$obj->classname=”shit”;

echo isset($obj->classname).”<br/>”;
unset($obj->classname);echo “<br/>”;
echo empty($obj->classname).”<br/>”;

结果是

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关键字的用法。

<?php
/*
* 克隆魔术点子
*/

class nbaPlayer{
public $name;
}

$james=new nbaPlayer();
$james->name=’James’;
echo $james->name.”<br/>”;

$kobe=clone $james;
$kobe->name=’Kobe’;
echo $kobe->name;

clone后的,便是个独立的指标,对其操作不影响原对象。

加上__clone()

<?php
/*
* 克隆魔术点子
*/

class nbaPlayer{
public $name;

public function __clone(){
$this->name=”shit”;
}

}

$james=new nbaPlayer();
$james->name=’James’;
echo $james->name.”<br/>”;

$kobe=clone $james;
echo $kobe->name.”<br/>”;
$kobe->name=’Kobe’;
echo $kobe->name.”<br/>”;

相似的话,用处在于clone后的初叶化;或者说,当复制后,不想揭发的少数新闻的遮盖。

在工作中常用到那三个,因为一贯对某些对象的操作,又不想影响原有数据,就克隆/复制三个出去。


2、MySQLi扩展

一 、安装及下载

1.1 优势及简介

立异更好,PHP5及然后推荐应用(只怕PDO)。

–优点

听说OOP和面向进程的使用;

协助预处理语句;

支撑工作。

–其他

进度更快。安全性更好

1.2 安装及布置

–安装

配置php,开启php_mysqli.dll;

配置extension_dir=’ext目录地方’;

重启服务器。

(小编用的是WAMP,直接打对勾就行)

–验证

<?php
/*
* 验证mysqli是不是打开
*/

//phpinfo();
//2.检测扩大是或不是已经加载
var_dump(extension_loaded(‘mysqli’));
var_dump(extension_loaded(‘curl’));
echo ‘<hr/>’;
//3.检查和测试函数是还是不是留存
var_dump(function_exists(‘mysqli_connect’));
echo ‘<hr/>’;
//4.获取当前已经拉开的扩充
print_r(get_loaded_extensions());
echo ‘<hr/>’;

 


困了,回去洗洗睡觉。。。

 

相关文章