目次
周一干不干活-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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 致命的エラーの解決策: 未定義関数 mysqli_connect() の呼び出し PHP 致命的エラーの解決策: 未定義関数 mysqli_connect() の呼び出し Jun 23, 2023 am 09:40 AM

PHP を使用して Web アプリケーションを作成する場合、データの保存に MySQL データベースがよく使用されます。 PHP は、MySQLi と呼ばれる MySQL データベースと対話する方法を提供します。ただし、MySQLi を使用している場合、以下に示すようなエラー メッセージが表示されることがあります。 PPHPFatalerror:Calltounknownfunctionmysqli_connect() このエラー メッセージは、PHP が MySQLi を見つけられないことを意味します。

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 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

mysqlの実行ファイルとは何ですか mysqlの実行ファイルとは何ですか Apr 11, 2023 am 10:38 AM

mysql の実行ファイルは mysqld です。mysqld は、Mysql サーバー プログラムを表す実行可能ファイルです。このファイルを実行すると、サーバー プロセスを直接開始できます。mysqld_safe は、間接的に mysqld を呼び出し、モニターも開始する起動スクリプトです。 。

PHP 警告: mysqli_connect(): (HY000/2002): 接続が拒否された場合の解決策 PHP 警告: mysqli_connect(): (HY000/2002): 接続が拒否された場合の解決策 Jun 23, 2023 am 08:54 AM

PHP を使用して MySQL データベースに接続するときに次のエラー メッセージが表示された場合: PHPWarning:mysqli_connect():(HY000/2002):Connection拒否された場合は、以下の手順に従ってこの問題の解決を試みることができます。 MySQL サービスが正常に動作しているかどうかを確認するには、まず MySQL サービスが正常に動作しているかどうかを確認する必要がありますが、サービスが動作していない、または開始に失敗している場合は、接続拒否エラーが発生する可能性があります。あなたはできる

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP 致命的エラーの解決策: 未定義メソッド mysqli::prepare() の呼び出し PHP 致命的エラーの解決策: 未定義メソッド mysqli::prepare() の呼び出し Jun 23, 2023 am 11:21 AM

mysqli 拡張機能を使用して MySQL データベースに接続し、操作すると、PHPFatalerror:Calltoundefinemethodmysqli::prepare() エラーが発生することがあります。このエラーは通常、次の理由によって発生します: PHP での mysqli 拡張機能のサポートが不十分であること、mysqli 拡張機能が正しくロードまたは構成されていないこと、PHP コードに構文エラーがあること、MySQL サーバーが正しく構成または実行されていないこと

PHP 致命的エラーの解決策: 未定義関数 mysqli_stmt_bind_param() の呼び出し PHP 致命的エラーの解決策: 未定義関数 mysqli_stmt_bind_param() の呼び出し Jun 23, 2023 am 10:43 AM

PHP を使用して Web サイトを開発する場合、データベース操作は非常に一般的です。 MySQLi は、MySQL データベースを操作するために PHP で一般的に使用される拡張機能で、比較的完全なオブジェクト指向インターフェイス、手続き型インターフェイスを提供し、プリペアド ステートメントの操作をサポートします。しかし、mysqli のプリペアド ステートメントを使用すると、次のようなエラーが発生することがあります。

See all articles