ホームページ >バックエンド開発 >PHPチュートリアル >月曜日に仕事をするかどうか -PHP+MySQLi、-phpmysqli_PHP チュートリアル
こんにちは
もともと仕事に意欲的だったのですが、朝から曇っていて起きられず、昼に寮に戻って服をいじりました(女性社員なので。)。すごいじゃないよ)そして昼寝もしなかったのに、どうしてこんな混乱した状態に陥ったんだろう、これを書くだけだ。
1. PHP での OOP プログラミング
4.7 ポリモーフィズム
--定義
インターフェースにはさまざまなメソッド実装があるため、この機能をポリモーフィズムと呼びます
--栗
function Eat($obj){
if($objinstanceof ICanEat){
$obj->eat("FOOD"); // 人間か動物かを知る必要はなく、ただ食べてください
}else{
echo "食べられません!n";
}
}
$man = 新しい人間();
$猿 = 新しい動物();
// インターフェースの異なる実装クラスを渡すと、同じコードでも動作が異なります。だからこそポリモーフィックになるのです。
食べる($man);
食べる($monkey);
--概要
/**
* ポリモーフィズム
* 1. オブジェクトがインターフェイス (instanceof) を実装している限り、オブジェクトのインターフェイス メソッドを直接呼び出すことができます
*/
4.8 抽象クラス
--質問
インターフェースに接続されているクラスのメソッドが一部同じなので、クラスには実装せずインターフェースに実装することは可能でしょうか?
たとえば、人間と動物は食べるものは異なりますが、呼吸は同じです。
--栗
abstract class ACanEat{ //キーワードの変更
abstract public function Eat($food);//クラスが独自に実装する必要がある場合は、その前にabstractキーワードを追加します
public function Breath() {
echo "息は空気を使います。
";
}
}
class Human extends ACanEat{ //implements はインターフェイスの実装に使用され、extends はここで使用されます
public function Eat($food){
echo "".$food." を食べる人間。
";
}
}
class Animal extends ACanEat{ //implements はインターフェイスの実装に使用され、extends はここで使用されます
public function Eat($food){
echo "「.$food」を食べる動物。"
}
}
$xiaoming=新しい人間();
$xiaohei=新しい動物();
$シャオミン->息();$シャオミン->食べる("食べ物");
$シャオヘイ->息();$シャオヘイ->食べる("クソ");
--概要
/**
* 抽象クラス
* 1. 抽象クラスでは、クラス内の一部のメソッドを一時的に実装しないことができます。これらのメソッドを抽象メソッドと呼びます
* 2. クラスに抽象メソッドが存在すると、このクラスは抽象クラスでなければなりません
* 3. 抽象クラスは、インターフェイスと同様に、オブジェクトに直接インスタンス化できません
*/
5.魔法の方法
5.1 はじめに
すべてのマジック メソッドの前には 2 つのアンダースコアが付いていることに注意してください__
PHP 特有の OOP。
コンストラクターやデストラクターなど。
5.2 __tostring() と __invoke()
--定義
__tostring()、オブジェクトが String として使用される場合、このメソッドは自動的に呼び出されます。 echo $obj;
__invoke()、オブジェクトがメソッド (関数) として呼び出されるとき、このメソッドは自動的に呼び出されます。 $obj(4);
--栗
/*
* tostring() マジック メソッド
* invoke() マジック メソッド
*/
class MagicTest{
public function __toString(){
return "これはクラス magictest です。";
}
public function __invoke($x){
echo "
".$x;
}
}
$obj=new MagicTest();
echo $obj;
$obj(5);
使用法はコンストラクターとデストラクターに似ています。これはより自動化されています (宣言がなくても自動的に呼び出されます) が、同時にエラーが発生しやすいので注意してください。
5.3 __call() と __callStatic() またはオーバーロード
--定義
オブジェクトが存在しないメソッド名にアクセスすると、__call() が自動的に呼び出されます。オブジェクトが存在しない静的メソッド名にアクセスすると、__callStatic() が自動的に呼び出されます。
これら 2 つのメソッドはオーバーロードとも呼ばれます (書き換えとは異なります)。これらの 2 つのメソッドを通じて、同じメソッド名の呼び出しを異なるメソッドで実装できます。 --栗/* * tostring() マジック メソッド
* invoke() マジック メソッド */
class MagicTest{
public function __toString(){
return "これはクラス magictest です。";
}
public function __invoke($x){
echo "
".$x."< br/>";
}
public function __call($name,$arguments){ //__callの形式は固定されており、最初はメソッド名、2番目はメソッド内のパラメータです
echo "呼び出し".$name." パラメータ: ".implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){
echo "パラメータを指定した「.$name.」の静的呼び出し: 「.implode(",", $arguments)."
";
}
}
$obj=new MagicTest();
echo $obj;
$obj(5);
$obj->runTest("para1","para2");
$obj::runTest("para3","para4");
メソッドを定義するときの形式は固定であることに注意してください。
5.4 __get()__set()__isset()__unset
--定義
これらのメソッドは、プロパティ オーバーロードマジック メソッドとも呼ばれます。
__set()、 アクセスできない属性 (1 つは属性が未定義である場合、もう 1 つはプライベートなどのアクセス許可がない場合) に値を割り当てるときに呼び出されます。
__get()、アクセスできない属性の値を読み取るときに呼び出されます。__isset()、アクセスできないプロパティに対して isset() または empty() が呼び出されたときに呼び出されます。
__unset(),. 。 。 。 。 。 。 。 。 unset()。 。 。 。 。 。 。 。 。 。
--栗
/*
* tostring() マジック メソッド * invoke() マジック メソッド
*/
class MagicTest{
public function __toString(){
}
public function __invoke($x){
echo "
".$x."< br/>";
}
public function __call($name,$arguments){ //__call の形式は固定です。最初の形式はメソッド名で、2 番目の形式はメソッド内のパラメータです
echo "パラメーターを使用して「. $name.」を呼び出します: 「.implode(",", $arguments)."
";
}
public static function __callstatic($name,$arguments){
echo "Staticパラメーターを使用して ". $name." を呼び出します: ".implode(",", $arguments)."
";
}
public function __get($name){ //get には名前が必要です
return " プロパティ ".$name."
" を取得します }
public function __set($name,$value){ //set には名前と値が必要です
echo " property ".$name ." to value ".$value.".
"; }
public function __isset($name){ //属性が定義されているかどうかを判断します
echo "__isset invoked< ;br/>gt;" ; return true; }
public function __unset($name){ //元に戻す
echo "プロテリ ".$name." の設定を解除します
"; return true; }
}
$ obj=new MagicTest();
echo $obj;
$obj(5);
$obj::runTest("para3","para4");
echo $obj->classname;
$obj->classname="shit";
echo isset($obj->classname)."
";
unset($obj->classname);echo "
";
結果は
5
パラメータ para1,para2 を指定して runTest を呼び出します。パラメータ para3,para4 を指定して runTest を静的に呼び出します。
プロパティ classname を取得します
プロパティ classname を値 shit に設定します。
__isset が呼び出されます
1
プロテリを設定解除しますクラス名
__issetが呼び出されました
ご覧のとおり、
実際、 __isset を呼び出すとき、 isset と empty は反対の操作のペアです。
次に、__set($name, $value) と __unset($name)
は反対の操作のペアですが、必要な要素が異なります。__isset($name)、__get($name) はすべて名前のみを必要とします (各マジック メソッドの機能を覚えておいてください。理解すると、覚えやすくなります)。
5.5 __clone()
--定義
それはクローン、つまりクローンです
--栗まず、clone キーワードの使用法を説明します。
/* * クローンマジックメソッド
*/
クラス nbaPlayer{
public $name;
}
$james=new nbaPlayer();
$james->name='ジェームズ';
echo $james->name."
";
$kobe=clone $james;
echo $kobe->name;
クローン作成後は別のオブジェクトとなり、そのオブジェクトに対する操作は元のオブジェクトには影響しません。
/* * クローンマジックメソッド
*/
class nbaPlayer{
public $name;
public function __clone(){
$this->name="shit";
} }
$james=new nbaPlayer();
$james->name='ジェームズ';
echo $james->name."
";
$kobe=clone $james;
echo $kobe->name."
";
$kobe->name='Kobe';
echo $kobe->name."
";
一般的に言えば、クローン後の初期化、またはコピー時に公開したくない特定の情報を隠すのに役立ちます。
私は仕事でこれをよく使います。オブジェクトを操作することが多く、元のデータに影響を与えたくないため
、単にクローン/コピーするだけです。---------------------------------------------------
2. MySQLi 拡張機能
1. インストールとダウンロード
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 '
---
眠いから帰って洗濯して寝る。 。 。
)