Heim >PHP-Framework >Denken Sie an PHP >Die Db-Klassenbibliothek von ThinkPHP wird in Verbindung mit Konnektoren, Abfragen und SQL-Generatoren verwendet
Im obigen Verzeichnis wird diese Verwendung im Framework nicht empfohlen, da dies der Fall ist etwas schwierig sein.
Der Fall in diesem Abschnitt wird mit der vom Framework üblicherweise verwendeten Datenbankabfragemethode abgefragt.
Im Bild oben können Sie sehen, dass die am häufigsten verwendeten Abfragemethoden verwendet werden. Als Nächstes werden diese Fälle im Detail analysiert.
Derselbe Code wird für die __callStatic
-Methode der Db-Klasse verwendet. Diese Methode wird ausgeführt, wenn eine nicht deklarierte statische Methode aufgerufen wird.
Diese Methode unterscheidet sich von der __call-Methode. Die __call-Methode wird aufgerufen, wenn eine Methode aufgerufen wird, die nicht vorhanden ist.
Für die Methode im obigen Bild aufgerufen: static::connect()
wird schließlich object(thinkdbQuery)
Auf dieses Objekt können Sie sich für die Ausführung des internen Prozesses beziehen Inhalt des zweiten Verzeichnisses. static::connect()
执行最后会返回 object(thinkdbQuery)
这个对象,至于内部流程的执行可以参考第二目录的内容。
所以执行流程会来到thinkphp/library/think/db/Query.php
这个类的table
方法。
参数就是table中传递的数据库表名tp_test
thinkphp/library/think/db/Query.php
table
Methode. Der Parameter ist der in Tabelle übergebene Datenbanktabellenname Wrap: Pausenwort; Randradius: 0px 2px; Hintergrundfarbe: rgba(27, 31, 35, 0,05); break: break-all;">tp_test.
🎜🎜🎜Gemäß dem im Bild oben bereitgestellten Code wird der übergebene Tabellenname dreimal beurteilt.
options
und schließlich wird thinkdbQuery Object
Dieses Objekt wird zurückgegeben. thinkdbQuery Object
这个对象进行返回。
where方法解析
table方法分析完成后会紧接着执行where方法,同样还是在类thinkphp/library/think/db/Query.php
thinkphp/library/think/db/Query.php
🎜🎜🎜🎜Im Bild oben sehen Sie eine Methode in dieser Klassefunc_get_args
, diese Methode gibt ein Array zurück, das die Funktionsparameterliste enthält. func_get_args
,这个方法会返回一个包含函数参数列表的数组。
这个方法平时都是跟call_user_func_array
同时使用,之前咔咔也使用这俩个方法进行过一次案例实验。
然后会使用函数array_shift
删除数组中的第一个元素(red),并返回被删除元素的值。
下图第一个结果为func_get_args
这个方法获取出来的数据,第二组结果为array_shift
call_user_func_array
wird gleichzeitig verwendet. Kaka hat diese beiden Methoden auch zuvor verwendet, um ein Fallexperiment durchzuführen. 🎜🎜Dann wird die Funktion verwendet array_shift
Löscht das erste Element (rot) im Array und gibt den Wert des gelöschten Elements zurück. 🎜🎜Das erste Ergebnis im Bild unten ist func_get_args
Die mit dieser Methode erhaltenen Daten, der zweite Satz von Ergebnissen, sindarray_shift
Das von dieser Methode zurückgegebene Ergebnis. 🎜Die von den beiden Ergebnissätzen zurückgegebenen Werte können zum besseren Verständnis verglichen werdenarray_shift
Verwendungsszenarien. array_shift
的使用场景。
紧接着会进行分析查询表达式,也就是方法parseWhereExp
Parameter eins ist die Abfragelogik und Parameter zwei ist der Parameter, der bei Verwendung der Groß-/Kleinschreibung übergeben wird.
🎜🎜🎜In der ersten Codezeile müssen wir einen Wissenspunkt lerneninstanceof
. instanceof
。
instanceof
可以判断某个对象是否是某个类的实例,判断一个对象是否实现了某个接口。
关于这个的使用案例在文章ThinkPHP源码解析之控制器
这一文中做了详细的说明。
根据学习instanceof
Basierend auf dem Lernen<figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Lesen Sie weiter die zweite Hälfte</figcaption><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Konvertieren Sie gemäß dem obigen Bild zunächst alle Symbole der Abfragelogik in Kleinbuchstaben</p>
<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Dann fällen Sie ein Urteil<code style="box-sizing: border-box; Schriftgröße : 14px; Schriftartenfamilie: „Operator Mono“, Monospace; Überlauf: 2px 4px; Randfarbe: rgb 93, 108) ;background-color: rgba(27, 31, 35, 0.05);" instanceof where>Gibt an, ob der übergebene Parameter eine Instanz der Where-Klasse ist. <code style="box-sizing: border-box; font-size: 14px; font-family: " operator mono consolas monaco menlo monospace overflow-wrap: break-word padding: border-radius: margin: color: rgb background-color: rgba word-break: break-all>$field instanceof Where
传递过来的参数是否为Where类的实例。
最后一个判断就是$field instanceof Expression
$field-Instanz des Ausdrucks
Die gleiche Funktion wie im vorherigen Schritt wird beurteilt. Die endgültige Ausführungslogik des Codes ist also der im Bild unten eingekreiste Teil.
Denken Sie daran, dass der Parameter, der in diesem Fall an where übergeben wird, ein Array ist. 🎜Wenn Sie die Parameter ändern in where('t_id',1)
will gois_string($field)
Dieser Vorgang ist jedem überlassen und KaKa wird ihn nicht analysieren. where('t_id',1)
则就会走is_string($field)
的这个流程,这个流程就交给大家了,咔咔就不去解析。
这里咔咔还是使用数组作为参数进行解析,那么代码依然会执行本类的parseArrayWhereItems
这个方法
在这个方法中先需要知道key
会返回什么,从当前内部指针位置返回元素键名。
所以代码会去执行if语句的判断,根据上边的所有判断都不符合所以会执行这段代码$where[] = [$key, is_array($val) ? 'IN' : '=', $val];
parseArrayWhereItems
Diese Methode🎜🎜🎜Bei dieser Methode müssen Sie zuerst wissenkey
gibt den Elementschlüsselnamen von der aktuellen internen Zeigerposition zurück. 🎜🎜Der Code führt also die Beurteilung der if-Anweisung aus. Nach allen oben genannten Beurteilungen ist sie nicht konsistent, daher wird dieser Code ausgeführt $where[] = [$key, is_array($val) ? 'IN' : '=' , $val];🎜<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Dieser Code bestimmt, ob der Wert des Schleifenarrays ein Array ist. Wenn es sich um ein Array handelt, ist es =. Da der Wert 1 ist, ist der zweite Wert des Arrays =. </p>
<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Dann ist der Endwert der im Bild unten abgedruckten Daten. </p>
<p><img src="https://img.php.cn/upload/image/303/557/279/1610338373356051.png" title="1610338373356051.png" alt="Die Db-Klassenbibliothek von ThinkPHP wird in Verbindung mit Konnektoren, Abfragen und SQL-Generatoren verwendet"></p>
<figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Der in where zurückgegebene Wert </figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Da where nicht leer ist, wird der Codeausführungsprozess an der unten gezeigten Position ausgeführt und schließlich wird eine Instanz dieser Klasse zurückgegeben. </p>
<p><img src="https://img.php.cn/upload/image/607/906/494/1610338367967444.png" title="1610338367967444.png" alt="Die Db-Klassenbibliothek von ThinkPHP wird in Verbindung mit Konnektoren, Abfragen und SQL-Generatoren verwendet"></p>
<figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;"> Speichern Sie die Abfrageparameter im Optionsattribut </figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb><span style="box-sizing: border-box; font-weight: 700; color: rgb(248, 57, 41);">find() Ausführungsprozess </span></p>
<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Dann führt der Code weiterhin die Suchmethode dieser Klasse aus, um einen einzelnen Datensatz zu finden. </p>
<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Da in find keine Parameter übergeben werden, wird der Code als <code style="box-sizing: border-box; font-size: 14px; font-family: " operator mono consolas monaco menlo monospace ausgef rand-radius: hintergrundfarbe: rgba word-break: break-all>$this->parseOptions();
Analyseausdruck (kann für Abfrage- oder Schreibvorgänge verwendet werden)$this->parseOptions();
分析表达式(可用于查询或者写入操作)
就目前写的案例而言,这段看似很长的代码大家好好看看都可以看明白,最终依然是返回当前的所有参数。
以下就是返回的所以结果
真正的查询数据是这块代码$result = $this->connection->find($this);
,这段代码会执行到文件thinkphp/library/think/db/Connection.php
🎜 🎜Das Folgende ist die Rückkehr Alle Ergebnisse 🎜
🎜
Das obige ist der detaillierte Inhalt vonDie Db-Klassenbibliothek von ThinkPHP wird in Verbindung mit Konnektoren, Abfragen und SQL-Generatoren verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!