构建自个儿的PHP框架-实现Model类(3)
构建自己的PHP框架--实现Model类(3)
在之前的博客中,我们实现并完善了Model类的findOne方法,下面我们来实现其中的其他方法。
先来看findAll方法,这个方法和findOne很相似。
<code class="sourceCode php"> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> findOne<span class="ot">(</span><span class="kw">$condition</span> = <span class="kw">null</span><span class="ot">)</span> { <span class="kw">$sql</span> = <span class="st">'select * from '</span> . <span class="kw">static</span>::tableName<span class="ot">();</span> <span class="kw">$params</span> = <span class="ot">[];</span> <span class="co">// 判空</span> <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$condition</span><span class="ot">))</span> { <span class="kw">$sql</span> .= <span class="st">' where '</span><span class="ot">;</span> <span class="kw">$params</span> = <span class="fu">array_values</span><span class="ot">(</span><span class="kw">$condition</span><span class="ot">);</span> <span class="kw">$keys</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$condition</span> <span class="kw">as</span> <span class="kw">$key</span> => <span class="kw">$value</span><span class="ot">)</span> { <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$keys</span><span class="ot">,</span> <span class="st">"</span><span class="kw">$key</span><span class="st"> = ?"</span><span class="ot">);</span> } <span class="kw">$sql</span> .= <span class="fu">implode</span><span class="ot">(</span><span class="st">' and '</span><span class="ot">,</span> <span class="kw">$keys</span><span class="ot">);</span> } <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$rs</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="kw">$models</span> = <span class="ot">[];</span> <span class="kw">if</span> <span class="ot">(</span><span class="kw">$rs</span><span class="ot">)</span> { <span class="co">// 直接获取出所有符合条件的</span> <span class="kw">$rows</span> = <span class="kw">$stmt</span>->fetchAll<span class="ot">(</span><span class="kw">PDO</span>::<span class="kw">FETCH_ASSOC</span><span class="ot">);</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$rows</span> <span class="kw">as</span> <span class="kw">$row</span><span class="ot">)</span> { <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$row</span><span class="ot">))</span> { <span class="kw">$model</span> = <span class="kw">new</span> <span class="kw">static</span><span class="ot">();</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$row</span> <span class="kw">as</span> <span class="kw">$rowKey</span> => <span class="kw">$rowValue</span><span class="ot">)</span> { <span class="kw">$model</span>-><span class="kw">$rowKey</span> = <span class="kw">$rowValue</span><span class="ot">;</span> } <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$models</span><span class="ot">,</span> <span class="kw">$model</span><span class="ot">);</span> } } } <span class="kw">return</span> <span class="kw">null</span><span class="ot">;</span> }</code>
你会发现有findOne和findAll方法很相似,明显可以将公共的部分抽出来,然后我们就多了如下两个方法:
<code class="sourceCode php"> <span class="co">/**</span><span class="co"> * Build a sql where part</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">mixed</span><span class="co"> $condition a set of column values</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> string</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> buildWhere<span class="ot">(</span><span class="kw">$condition</span><span class="ot">,</span> <span class="kw">$params</span> = <span class="kw">null</span><span class="ot">)</span> { <span class="kw">if</span> <span class="ot">(</span><span class="fu">is_null</span><span class="ot">(</span><span class="kw">$params</span><span class="ot">))</span> { <span class="kw">$params</span> = <span class="ot">[];</span> } <span class="kw">$where</span> = <span class="st">''</span><span class="ot">;</span> <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$condition</span><span class="ot">))</span> { <span class="kw">$where</span> .= <span class="st">' where '</span><span class="ot">;</span> <span class="kw">$keys</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$condition</span> <span class="kw">as</span> <span class="kw">$key</span> => <span class="kw">$value</span><span class="ot">)</span> { <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$keys</span><span class="ot">,</span> <span class="st">"</span><span class="kw">$key</span><span class="st"> = ?"</span><span class="ot">);</span> <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$params</span><span class="ot">,</span> <span class="kw">$value</span><span class="ot">);</span> } <span class="kw">$where</span> .= <span class="fu">implode</span><span class="ot">(</span><span class="st">' and '</span><span class="ot">,</span> <span class="kw">$keys</span><span class="ot">);</span> } <span class="kw">return</span> <span class="ot">[</span><span class="kw">$where</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">];</span> } <span class="co">/**</span><span class="co"> * Convert array to model</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">mixed</span><span class="co"> $row the row data from database</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> arr2Model<span class="ot">(</span><span class="kw">$row</span><span class="ot">)</span> { <span class="kw">$model</span> = <span class="kw">new</span> <span class="kw">static</span><span class="ot">();</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$row</span> <span class="kw">as</span> <span class="kw">$rowKey</span> => <span class="kw">$rowValue</span><span class="ot">)</span> { <span class="kw">$model</span>-><span class="kw">$rowKey</span> = <span class="kw">$rowValue</span><span class="ot">;</span> } <span class="kw">return</span> <span class="kw">$model</span><span class="ot">;</span> }</code>
分别是构建sql中where部分的方法和将查找到的Array转换成Model的方法。大家会奇怪第一个方法中为什么需要params参数和返回值,其实这个为了之后的updateAll方法的使用。其实这个地方跟适合使用引用传值。
这样我们的findOne和findAll就便成了如下内容:
<code class="sourceCode php"> <span class="co">/**</span><span class="co"> * Returns a single model instance by a primary key or an array of column values.</span><span class="co"> *</span><span class="co"> * ```php</span><span class="co"> * // find the first customer whose age is 30 and whose status is 1</span><span class="co"> * $customer = Customer::findOne(['age' => 30, 'status' => 1]);</span><span class="co"> * ```</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">mixed</span><span class="co"> $condition a set of column values</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> static|null Model instance matching the condition, or null if nothing matches.</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> findOne<span class="ot">(</span><span class="kw">$condition</span> = <span class="kw">null</span><span class="ot">)</span> { <span class="fu">list</span><span class="ot">(</span><span class="kw">$where</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">)</span> = <span class="kw">static</span>::buildWhere<span class="ot">(</span><span class="kw">$condition</span><span class="ot">);</span> <span class="kw">$sql</span> = <span class="st">'select * from '</span> . <span class="kw">static</span>::tableName<span class="ot">()</span> . <span class="kw">$where</span><span class="ot">;</span> <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$rs</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="kw">if</span> <span class="ot">(</span><span class="kw">$rs</span><span class="ot">)</span> { <span class="kw">$row</span> = <span class="kw">$stmt</span>->fetch<span class="ot">(</span><span class="kw">PDO</span>::<span class="kw">FETCH_ASSOC</span><span class="ot">);</span> <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$row</span><span class="ot">))</span> { <span class="kw">return</span> <span class="kw">static</span>::arr2Model<span class="ot">(</span><span class="kw">$row</span><span class="ot">);</span> } } <span class="kw">return</span> <span class="kw">null</span><span class="ot">;</span> } <span class="co">/**</span><span class="co"> * Returns a list of models that match the specified primary key value(s) or a set of column values.</span><span class="co"> *</span><span class="co"> * ```php</span><span class="co"> * // find customers whose age is 30 and whose status is 1</span><span class="co"> * $customers = Customer::findAll(['age' => 30, 'status' => 1]);</span><span class="co"> * ```</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">mixed</span><span class="co"> $condition a set of column values</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> array an array of Model instance, or an empty array if nothing matches.</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> findAll<span class="ot">(</span><span class="kw">$condition</span> = <span class="kw">null</span><span class="ot">)</span> { <span class="fu">list</span><span class="ot">(</span><span class="kw">$where</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">)</span> = <span class="kw">static</span>::buildWhere<span class="ot">(</span><span class="kw">$condition</span><span class="ot">);</span> <span class="kw">$sql</span> = <span class="st">'select * from '</span> . <span class="kw">static</span>::tableName<span class="ot">()</span> . <span class="kw">$where</span><span class="ot">;</span> <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$rs</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="kw">$models</span> = <span class="ot">[];</span> <span class="kw">if</span> <span class="ot">(</span><span class="kw">$rs</span><span class="ot">)</span> { <span class="kw">$rows</span> = <span class="kw">$stmt</span>->fetchAll<span class="ot">(</span><span class="kw">PDO</span>::<span class="kw">FETCH_ASSOC</span><span class="ot">);</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$rows</span> <span class="kw">as</span> <span class="kw">$row</span><span class="ot">)</span> { <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$row</span><span class="ot">))</span> { <span class="kw">$model</span> = <span class="kw">static</span>::arr2Model<span class="ot">(</span><span class="kw">$row</span><span class="ot">);</span> <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$models</span><span class="ot">,</span> <span class="kw">$model</span><span class="ot">);</span> } } } <span class="kw">return</span> <span class="kw">$models</span><span class="ot">;</span> }</code>
剩下的updateAll/deleteAll/insert/update和delete方法就不一一详细说明了,直接给出代码。其基本思想都是一致的,都是按照规则拼接SQL语句。
<code class="sourceCode php"> <span class="co">/**</span><span class="co"> * Updates models using the provided attribute values and conditions.</span><span class="co"> * For example, to change the status to be 2 for all customers whose status is 1:</span><span class="co"> *</span><span class="co"> * ~~~</span><span class="co"> * Customer::updateAll(['status' => 1], ['status' => '2']);</span><span class="co"> * ~~~</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">array</span><span class="co"> $attributes attribute values (name-value pairs) to be saved for the model.</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">array</span><span class="co"> $condition the condition that matches the models that should get updated.</span><span class="co"> * An empty condition will match all models.</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> integer the number of rows updated</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> updateAll<span class="ot">(</span><span class="kw">$condition</span><span class="ot">,</span> <span class="kw">$attributes</span><span class="ot">)</span> { <span class="kw">$sql</span> = <span class="st">'update '</span> . <span class="kw">static</span>::tableName<span class="ot">();</span> <span class="kw">$params</span> = <span class="ot">[];</span> <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">empty</span><span class="ot">(</span><span class="kw">$attributes</span><span class="ot">))</span> { <span class="kw">$sql</span> .= <span class="st">' set '</span><span class="ot">;</span> <span class="kw">$params</span> = <span class="fu">array_values</span><span class="ot">(</span><span class="kw">$attributes</span><span class="ot">);</span> <span class="kw">$keys</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$attributes</span> <span class="kw">as</span> <span class="kw">$key</span> => <span class="kw">$value</span><span class="ot">)</span> { <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$keys</span><span class="ot">,</span> <span class="st">"</span><span class="kw">$key</span><span class="st"> = ?"</span><span class="ot">);</span> } <span class="kw">$sql</span> .= <span class="fu">implode</span><span class="ot">(</span><span class="st">' , '</span><span class="ot">,</span> <span class="kw">$keys</span><span class="ot">);</span> } <span class="fu">list</span><span class="ot">(</span><span class="kw">$where</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">)</span> = <span class="kw">static</span>::buildWhere<span class="ot">(</span><span class="kw">$condition</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">);</span> <span class="kw">$sql</span> .= <span class="kw">$where</span><span class="ot">;</span> <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$execResult</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="kw">if</span> <span class="ot">(</span><span class="kw">$execResult</span><span class="ot">)</span> { <span class="co">// 获取更新的行数</span> <span class="kw">$execResult</span> = <span class="kw">$stmt</span>->rowCount<span class="ot">();</span> } <span class="kw">return</span> <span class="kw">$execResult</span><span class="ot">;</span> } <span class="co">/**</span><span class="co"> * Deletes models using the provided conditions.</span><span class="co"> * WARNING: If you do not specify any condition, this method will delete ALL rows in the table.</span><span class="co"> *</span><span class="co"> * For example, to delete all customers whose status is 3:</span><span class="co"> *</span><span class="co"> * ~~~</span><span class="co"> * Customer::deleteAll([status = 3]);</span><span class="co"> * ~~~</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@param</span><span class="co"> </span><span class="kw">array</span><span class="co"> $condition the condition that matches the models that should get deleted.</span><span class="co"> * An empty condition will match all models.</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> integer the number of rows deleted</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">static</span> <span class="kw">function</span> deleteAll<span class="ot">(</span><span class="kw">$condition</span><span class="ot">)</span> { <span class="fu">list</span><span class="ot">(</span><span class="kw">$where</span><span class="ot">,</span> <span class="kw">$params</span><span class="ot">)</span> = <span class="kw">static</span>::buildWhere<span class="ot">(</span><span class="kw">$condition</span><span class="ot">);</span> <span class="kw">$sql</span> = <span class="st">'delete from '</span> . <span class="kw">static</span>::tableName<span class="ot">()</span> . <span class="kw">$where</span><span class="ot">;</span> <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$execResult</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="kw">if</span> <span class="ot">(</span><span class="kw">$execResult</span><span class="ot">)</span> { <span class="co">// 获取删除的行数</span> <span class="kw">$execResult</span> = <span class="kw">$stmt</span>->rowCount<span class="ot">();</span> } <span class="kw">return</span> <span class="kw">$execResult</span><span class="ot">;</span> } <span class="co">/**</span><span class="co"> * Inserts the model into the database using the attribute values of this record.</span><span class="co"> *</span><span class="co"> * Usage example:</span><span class="co"> *</span><span class="co"> * ```php</span><span class="co"> * $customer = new Customer;</span><span class="co"> * $customer->name = $name;</span><span class="co"> * $customer->email = $email;</span><span class="co"> * $customer->insert();</span><span class="co"> * ```</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> boolean whether the model is inserted successfully.</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">function</span> insert<span class="ot">()</span> { <span class="kw">$sql</span> = <span class="st">'insert into '</span> . <span class="kw">static</span>::tableName<span class="ot">();</span> <span class="kw">$params</span> = <span class="ot">[];</span> <span class="kw">$keys</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$this</span> <span class="kw">as</span> <span class="kw">$key</span> => <span class="kw">$value</span><span class="ot">)</span> { <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$keys</span><span class="ot">,</span> <span class="kw">$key</span><span class="ot">);</span> <span class="fu">array_push</span><span class="ot">(</span><span class="kw">$params</span><span class="ot">,</span> <span class="kw">$value</span><span class="ot">);</span> } <span class="co">// 构建由?组成的数组,其个数与参数相等数相同</span> <span class="kw">$holders</span> = <span class="fu">array_fill</span><span class="ot">(</span><span class="dv">0</span><span class="ot">,</span> <span class="fu">count</span><span class="ot">(</span><span class="kw">$keys</span><span class="ot">),</span> <span class="st">'?'</span><span class="ot">);</span> <span class="kw">$sql</span> .= <span class="st">' ('</span> . <span class="fu">implode</span><span class="ot">(</span><span class="st">' , '</span><span class="ot">,</span> <span class="kw">$keys</span><span class="ot">)</span> . <span class="st">') values ( '</span> . <span class="fu">implode</span><span class="ot">(</span><span class="st">' , '</span><span class="ot">,</span> <span class="kw">$holders</span><span class="ot">)</span> . <span class="st">')'</span><span class="ot">;</span> <span class="kw">$stmt</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->prepare<span class="ot">(</span><span class="kw">$sql</span><span class="ot">);</span> <span class="kw">$execResult</span> = <span class="kw">$stmt</span>->execute<span class="ot">(</span><span class="kw">$params</span><span class="ot">);</span> <span class="co">// 将一些自增值赋回Model中</span> <span class="kw">$primaryKeys</span> = <span class="kw">static</span>::primaryKey<span class="ot">();</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$primaryKeys</span> <span class="kw">as</span> <span class="kw">$name</span><span class="ot">)</span> { <span class="co">// Get the primary key</span> <span class="kw">$lastId</span> = <span class="kw">static</span>::getDb<span class="ot">()</span>->lastInsertId<span class="ot">(</span><span class="kw">$name</span><span class="ot">);</span> <span class="kw">$this</span>-><span class="kw">$name</span> = <span class="dt">(int)</span> <span class="kw">$lastId</span><span class="ot">;</span> } <span class="kw">return</span> <span class="kw">$execResult</span><span class="ot">;</span> } <span class="co">/**</span><span class="co"> * Saves the changes to this model into the database.</span><span class="co"> *</span><span class="co"> * Usage example:</span><span class="co"> *</span><span class="co"> * ```php</span><span class="co"> * $customer = Customer::findOne(['id' => $id]);</span><span class="co"> * $customer->name = $name;</span><span class="co"> * $customer->email = $email;</span><span class="co"> * $customer->update();</span><span class="co"> * ```</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> integer|boolean the number of rows affected.</span><span class="co"> * Note that it is possible that the number of rows affected is 0, even though the</span><span class="co"> * update execution is successful.</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">function</span> update<span class="ot">()</span> { <span class="kw">$primaryKeys</span> = <span class="kw">static</span>::primaryKey<span class="ot">();</span> <span class="kw">$condition</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$primaryKeys</span> <span class="kw">as</span> <span class="kw">$name</span><span class="ot">)</span> { <span class="kw">$condition</span><span class="ot">[</span><span class="kw">$name</span><span class="ot">]</span> = <span class="fu">isset</span><span class="ot">(</span><span class="kw">$this</span>-><span class="kw">$name</span><span class="ot">)</span> <span class="ot">?</span> <span class="kw">$this</span>-><span class="kw">$name</span> <span class="ot">:</span> <span class="kw">null</span><span class="ot">;</span> } <span class="kw">$attributes</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$this</span> <span class="kw">as</span> <span class="kw">$key</span> => <span class="kw">$value</span><span class="ot">)</span> { <span class="kw">if</span> <span class="ot">(</span>!<span class="fu">in_array</span><span class="ot">(</span><span class="kw">$key</span><span class="ot">,</span> <span class="kw">$primaryKeys</span><span class="ot">,</span> <span class="kw">true</span><span class="ot">))</span> { <span class="kw">$attributes</span><span class="ot">[</span><span class="kw">$key</span><span class="ot">]</span> = <span class="kw">$value</span><span class="ot">;</span> } } <span class="kw">return</span> <span class="kw">static</span>::updateAll<span class="ot">(</span><span class="kw">$condition</span><span class="ot">,</span> <span class="kw">$attributes</span><span class="ot">)</span> !== <span class="kw">false</span><span class="ot">;</span> } <span class="co">/**</span><span class="co"> * Deletes the model from the database.</span><span class="co"> *</span><span class="co"> * </span><span class="kw">@return</span><span class="co"> integer|boolean the number of rows deleted.</span><span class="co"> * Note that it is possible that the number of rows deleted is 0, even though the deletion execution is successful.</span><span class="co"> */</span> <span class="kw">public</span> <span class="kw">function</span> delete<span class="ot">()</span> { <span class="kw">$primaryKeys</span> = <span class="kw">static</span>::primaryKey<span class="ot">();</span> <span class="kw">$condition</span> = <span class="ot">[];</span> <span class="kw">foreach</span> <span class="ot">(</span><span class="kw">$primaryKeys</span> <span class="kw">as</span> <span class="kw">$name</span><span class="ot">)</span> { <span class="kw">$condition</span><span class="ot">[</span><span class="kw">$name</span><span class="ot">]</span> = <span class="fu">isset</span><span class="ot">(</span><span class="kw">$this</span>-><span class="kw">$name</span><span class="ot">)</span> <span class="ot">?</span> <span class="kw">$this</span>-><span class="kw">$name</span> <span class="ot">:</span> <span class="kw">null</span><span class="ot">;</span> } <span class="kw">return</span> <span class="kw">static</span>::deleteAll<span class="ot">(</span><span class="kw">$condition</span><span class="ot">)</span> !== <span class="kw">false</span><span class="ot">;</span> }</code>
这样基本的Model就算是暂时完成了,虽然可能还有很多问题和局限,但暂时先这样了,我们之后有机会会一步一步的去完善。
好了,今天就先到这里。项目内容和博客内容也都会放到Github上,欢迎大家提建议。
code:https://github.com/CraryPrimitiveMan/simple-framework/tree/0.7
blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











많은 중앙화된 거래소에서 문제가 발생한 후 점점 더 많은 통화 투자자들이 중앙화된 거래소에서 발생하는 위험을 줄이기 위해 자산을 콜드 지갑으로 이전하기 시작했습니다. 이 글에서는 세계 최초의 콜드월렛 제공업체인 Trezor를 소개하겠습니다. 2014년 최초의 콜드월렛이 출시된 이후 전 세계 여러 나라에서 판매되고 있습니다. Trezor의 제품에는 2014년에 출시된 Model One과 2018년에 출시된 고급 버전인 Model T가 포함됩니다. 다음에서는 계속해서 이 두 제품과 다른 콜드월렛의 차이점을 소개하겠습니다. Trezor 콜드월렛이란 무엇인가요? 2014년 Trezor는 최초의 콜드 지갑 ModelOne을 출시했습니다. 일반적인 BTC, ETH, USDT 및 기타 통화 외에도 지갑은 1,000개 이상의 다른 통화도 지원합니다.

C 언어에서 정적의 역할 및 사용법: 1. 변수 범위, 3. 내부 함수, 5. 함수 수정, 1. 변수 범위, 변수 앞에 static 키워드가 있는 경우 변수의 범위는 변수가 선언된 파일로 제한됩니다. 즉, 변수는 "파일 수준 범위"이므로 " 중복 정의" 변수 문제 2. 수명주기, 정적 변수는 프로그램 실행을 시작할 때 한 번 초기화되고 프로그램이 끝나면 소멸됩니다.

1. static 먼저 다음 프로그램을 살펴보십시오. publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} 이것을 보았습니다. 세그먼트 프로그램은 Java를 공부한 대부분의 사람들에게 친숙합니다. Java를 배우지 않았지만 C 등 다른 고급 언어를 배웠더라도 이 코드의 의미를 이해할 수 있어야 합니다. 단순히 "Hello, world"를 출력하고 다른 용도는 없습니다. 그러나 정적 키워드의 주요 목적을 보여줍니다.

Django는 오픈 소스 Python 웹 프레임워크로 MVT(Model-View-Template) 아키텍처 패턴을 채택하고 애플리케이션을 모델, 뷰 및 템플릿의 세 부분으로 나눕니다. 그 중 Model은 Django 프레임워크의 기본 구성 요소로 데이터를 정의하고 관리하는 데 사용됩니다. 이 글에서는 Django 프레임워크의 Model에 대해 자세히 설명합니다. Django의 모델이란 무엇입니까?

정적 기능: 1. 변수 3. 클래스 4. 기타 용도 6. 싱글톤 모드 9. 로컬 변수 메모리 레이아웃 최적화; 11. 반복적인 초기화를 피하십시오. 12. 함수에 사용하십시오. 자세한 소개: 1. 변수, 정적 변수. 변수가 정적으로 선언되면 인스턴스 수준이 아닌 클래스 수준에 속합니다. 즉, 개체 수에 관계없이 정적 변수는 하나만 존재하며 모든 개체가 존재합니다. 이 정적 변수 등을 공유하십시오.

C 언어 static 키워드의 실제 응용 시나리오 및 활용 기술 1. 개요 static은 C 언어에서 변수와 함수를 수정하는 데 사용되는 키워드입니다. 그 기능은 프로그램 실행 중에 수명 주기와 가시성을 변경하여 변수와 함수를 정적으로 만드는 것입니다. 이 기사에서는 static 키워드의 실제 응용 시나리오와 사용 기술을 소개하고 구체적인 코드 예제를 통해 설명합니다. 2. 정적 변수는 변수의 수명 주기를 연장합니다. static 키워드를 사용하여 지역 변수를 수정하면 수명 주기가 연장됩니다.

PHP 정적 정적 메서드의 "정적"은 클래스를 인스턴스화하지 않고도 이러한 속성과 메서드를 직접 호출할 수 있음을 의미합니다. static은 클래스의 속성과 메서드를 수정하는 데 사용되는 키워드이며 사용 구문은 "class Foo { 공개 정적 $my_static = 'hello';}".

Springboot는 pro 파일을 읽고 정적 정적 변수 mailConfig.properties#Server mail.host=smtp.qq.com#포트 번호 mail.port=587#이메일 계정 mail.userName=hzy_daybreak_lc@foxmail.com#이메일 인증 코드 메일을 주입합니다. passWord =vxbkycyjkceocbdc#시간 지연 mail.timeout=25000#Sender mail.emailForm=hzy_daybreak_lc@foxmail.com#Sender mai
