目錄
周一干不干活-PHP+MySQLi,-phpmysqli
首頁 php教程 php手册 周一干不干活-PHP+MySQLi,-phpmysqli

周一干不干活-PHP+MySQLi,-phpmysqli

Jun 13, 2016 am 08:50 AM
mysqli

周一干不干活-PHP+MySQLi,-phpmysqli

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()会被自动调用;

这两个方法,又称为重载(不同于重写);通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现

--栗子

/*
* tostring()魔术方法
* invoke()魔术方法
*/

class MagicTest{
public function __toString(){
return "This is the class magictest.";
}
public function __invoke($x){
echo "
".$x."
";
}
public function __call($name,$arguments){ //__call的格式是固定的,第一个是方法名,第二个是方法内的参数
echo "Calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){ 
echo "Static calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
}
$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()。。。。。。。。。。

--栗子

/*
* tostring()魔术方法
* invoke()魔术方法
*/

class MagicTest{
public function __toString(){
return "This is the class magictest.";
}
public function __invoke($x){
echo "
".$x."
";
}
public function __call($name,$arguments){ //__call的格式是固定的,第一个是方法名,第二个是方法内的参数
echo "Calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){
echo "Static calling ".$name." with parameters: ".implode(",", $arguments)."
";
}
public function __get($name){ //get要有name
return "Getting the property ".$name."
";
}
public function __set($name,$value){ //set要有名有值
echo "Setting the property ".$name." to value ".$value.".
";
}
public function __isset($name){ //判断是否定义了属性
echo "__isset invoked
";
return true;
}
public function __unset($name){ //撤销
echo "unsetting protery ".$name."
";
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)."
";
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关键字的用法。

/*
* 克隆魔术方法
*/

class nbaPlayer{
public $name;
}

$james=new nbaPlayer();
$james->name='James';
echo $james->name."
";

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

clone后的,就是个单独的对象,对其操作不影响原对象。

加上__clone()

/*
* 克隆魔术方法
*/

class nbaPlayer{
public $name;

public function __clone(){
$this->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 '
';

 

---

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

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP Fatal error: Call to undefined function mysqli_connect()的解決方法 PHP Fatal error: Call to undefined function mysqli_connect()的解決方法 Jun 23, 2023 am 09:40 AM

在使用PHP編寫Web應用程式時,經常會使用MySQL資料庫來儲存資料。 PHP提供了一種與MySQL資料庫互動的方法,稱為MySQLi。然而,有時在使用MySQLi時,會遇到一個錯誤訊息,如下所示:PHPFatalerror:Calltoundefinedfunctionmysqli_connect()這個錯誤訊息意味著PHP無法找到my

PHP PDO 與 mysqli:比較和對比 PHP PDO 與 mysqli:比較和對比 Feb 19, 2024 pm 12:24 PM

PDOPDO是一個物件導向的資料庫存取抽象層,它為PHP提供了一個統一的接口,允許您使用相同的程式碼與不同的資料庫(如Mysql、postgresql、oracle)進行互動。 PDO隱藏了底層資料庫連線的複雜性,簡化了資料庫操作。優缺點優點:統一接口,支援多種資料庫簡化資料庫操作,降低開發難度提供預處理語句,提高安全性支援事務處理缺點:效能可能比原生擴充稍低依賴外部函式庫,可能會增加開銷演示程式碼使用PDO連線mysql資料庫:$db=newPDO("mysql:host=localhost;dbnam

php無法連接mysqli怎麼辦 php無法連接mysqli怎麼辦 Nov 09, 2022 am 10:07 AM

php無法連接mysqli的解決方法:1.開啟「php.ini」檔案;2、找到「mysqli.reconnect」;3、將「mysqli.reconnect = OFF」改成「mysqli.reconnect = on」即可。

PHP Warning: mysqli_connect(): (HY000/2002): Connection refused的解決方法 PHP Warning: mysqli_connect(): (HY000/2002): Connection refused的解決方法 Jun 23, 2023 am 08:54 AM

如果你使用PHP連接MySQL資料庫時遇到了以下錯誤提示:PHPWarning:mysqli_connect():(HY000/2002):Connectionrefused那麼你可以嘗試按照下面的步驟來解決這個問題。確認MySQL服務是否正常運作首先應該檢查MySQL服務是否正常執行,如果服務未運行或啟動失敗,就可能會導致連線被拒絕的錯誤。你可

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

mysql的運行檔是什麼 mysql的運行檔是什麼 Apr 11, 2023 am 10:38 AM

mysql的運行文件是mysqld;mysqld是一個可執行文件,代表著Mysql伺服器程序,執行這個文件可以直接啟動一個伺服器進程;而mysqld_safe是一個啟動腳本,它會間接調用mysqld,並且還會順帶啟動一個監控進程。

PHP Fatal error: Call to undefined method mysqli::prepare()的解決方法 PHP Fatal error: Call to undefined method mysqli::prepare()的解決方法 Jun 23, 2023 am 11:21 AM

當使用mysqli擴充來連接和操作MySQL資料庫時,有時會遇到PHPFatalerror:Calltoundefinedmethodmysqli::prepare()的錯誤。這個錯誤通常是由以下幾個原因引起的:PHP對mysqli擴充功能的支援不足;mysqli擴充沒有正確載入或配置;PHP程式碼有語法錯誤;MySQL伺服器沒有正確配置或正在執行

PHP Fatal error: Call to undefined function mysqli_stmt_bind_param()的解決方法 PHP Fatal error: Call to undefined function mysqli_stmt_bind_param()的解決方法 Jun 23, 2023 am 10:43 AM

在使用PHP開發網站時,資料庫的操作是非常常見的。而MySQLi是PHP中常用的操作MySQL資料庫的擴展,提供了比較完備的物件導向介面、過程化接口,以及支援預處理語句的操作。但有時候我們在使用mysqli的預處理語句時,會遇到這樣的錯誤:PHPFatalerror:Calltoundefinedfunctionmysqli_stmt_bin

See all articles