[转载]PHP ORM 个人实现 - ﹏Sakura - 博客园

[转载]PHP ORM 个人实现 – ﹏Sakura – 博客园.

<span class="pun"><?</span><span class="pln">php
</span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Model</span><span class="pun">{</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $pk </span><span class="pun">=</span><span class="pln"> </span><span class="str">'id'</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_ID </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_tableName</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_arRelationMap</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_modifyMap</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $is_load </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_blForDeletion</span><span class="pun">;</span><span class="pln">
   </span><span class="kwd">protected</span><span class="pln"> $_DB</span><span class="pun">;</span><span class="pln">
 
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __consturct</span><span class="pun">(</span><span class="pln">$id </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">){</span><span class="pln">
       $this</span><span class="pun">-></span><span class="pln">_DB </span><span class="pun">=</span><span class="pln"> mysql_connect</span><span class="pun">(</span><span class="str">'127.0.0.1'</span><span class="pun">,</span><span class="str">'root'</span><span class="pun">,</span><span class="str">''</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
       $this</span><span class="pun">-></span><span class="pln">_tableName </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">getTableName</span><span class="pun">();</span><span class="pln">
       $this</span><span class="pun">-></span><span class="pln">_arRelationMap </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">getRelationMap</span><span class="pun">();</span><span class="pln">
       </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$id</span><span class="pun">))</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID </span><span class="pun">=</span><span class="pln"> $id</span><span class="pun">;</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
   </span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getTableName</span><span class="pun">();</span><span class="pln">
   </span><span class="kwd">abstract</span><span class="pln"> </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getRelationMap</span><span class="pun">();</span><span class="pln">
 
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="typ">Load</span><span class="pun">(){</span><span class="pln">
       </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID</span><span class="pun">)){</span><span class="pln">
           $sql </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT "</span><span class="pun">;</span><span class="pln">
           </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_arRelationMap </span><span class="kwd">as</span><span class="pln"> $k </span><span class="pun">=></span><span class="pln"> $v</span><span class="pun">){</span><span class="pln">
               $sql </span><span class="pun">.=</span><span class="pln"> </span><span class="str">'`'</span><span class="pun">.</span><span class="pln">$k</span><span class="pun">.</span><span class="str">'`,'</span><span class="pun">;</span><span class="pln">
           </span><span class="pun">}</span><span class="pln">
           $sql </span><span class="pun">.=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$sql</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="pln">strlen</span><span class="pun">(</span><span class="pln">$sql</span><span class="pun">)-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
           $sql </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"FROM "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_tableName</span><span class="pun">.</span><span class="str">" WHERE "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">pk</span><span class="pun">.</span><span class="str">" = "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID</span><span class="pun">;</span><span class="pln">
           $result </span><span class="pun">=</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_DB</span><span class="pun">-></span><span class="pln">mysql_query</span><span class="pun">(</span><span class="pln">$sql</span><span class="pun">);</span><span class="pln">
           </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$result</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pln"> $k1 </span><span class="pun">=></span><span class="pln"> $v1</span><span class="pun">){</span><span class="pln">
              $member </span><span class="pun">=</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">_arRelationMap</span><span class="pun">[</span><span class="pln">$key</span><span class="pun">];</span><span class="pln">
              </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">property_exists</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">,</span><span class="pln">$member</span><span class="pun">)){</span><span class="pln">
                 </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">is_numeric</span><span class="pun">(</span><span class="pln">$member</span><span class="pun">)){</span><span class="pln">
                     </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$this->'</span><span class="pun">.</span><span class="pln">$member</span><span class="pun">.</span><span class="str">' = '</span><span class="pun">.</span><span class="pln">$value</span><span class="pun">.</span><span class="str">';'</span><span class="pun">);</span><span class="pln">
                 </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
                     </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$this->'</span><span class="pun">.</span><span class="pln">$member</span><span class="pun">.</span><span class="str">' = "'</span><span class="pun">.</span><span class="pln">$value</span><span class="pun">.</span><span class="str">'";'</span><span class="pun">);</span><span class="pln">
                 </span><span class="pun">}</span><span class="pln">
              </span><span class="pun">}</span><span class="pln">
           </span><span class="pun">}</span><span class="pln">
       </span><span class="pun">}</span><span class="pln">
       $this</span><span class="pun">-></span><span class="pln">is_load </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __call</span><span class="pun">(</span><span class="pln">$method</span><span class="pun">,</span><span class="pln">$param</span><span class="pun">){</span><span class="pln">
      $type   </span><span class="pun">=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$method</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
      $member </span><span class="pun">=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$method</span><span class="pun">,</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
      </span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">$type</span><span class="pun">){</span><span class="pln">
         </span><span class="kwd">case</span><span class="pln"> </span><span class="str">'get'</span><span class="pun">:</span><span class="pln">
             </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">getMember</span><span class="pun">(</span><span class="pln">$member</span><span class="pun">);</span><span class="pln">
             </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
         </span><span class="kwd">case</span><span class="pln"> </span><span class="str">'set'</span><span class="pun">:</span><span class="pln">
             </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">setMember</span><span class="pun">(</span><span class="pln">$member</span><span class="pun">,</span><span class="pln">$param</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> setMember</span><span class="pun">(</span><span class="pln">$key</span><span class="pun">){</span><span class="pln">
       </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">property_exists</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">,</span><span class="pln">$key</span><span class="pun">)){</span><span class="pln">
          </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">is_numeric</span><span class="pun">(</span><span class="pln">$val</span><span class="pun">)){</span><span class="pln">
             </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$this->'</span><span class="pun">.</span><span class="pln">$key</span><span class="pun">.</span><span class="str">' = '</span><span class="pun">.</span><span class="pln">$val</span><span class="pun">.</span><span class="str">';'</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
             </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$this->'</span><span class="pun">.</span><span class="pln">$key</span><span class="pun">.</span><span class="str">' = "'</span><span class="pun">.</span><span class="pln">$val</span><span class="pun">.</span><span class="str">'";'</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="pln">
          $this</span><span class="pun">-></span><span class="pln">_modifyMap</span><span class="pun">[</span><span class="pln">$key</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
       </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
          </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
       </span><span class="pun">}</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
    
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getMember</span><span class="pun">(</span><span class="pln">$key</span><span class="pun">,</span><span class="pln">$val</span><span class="pun">){</span><span class="pln">
       </span><span class="kwd">if</span><span class="pun">(!</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">is_load</span><span class="pun">){</span><span class="pln">
          $this</span><span class="pun">-></span><span class="typ">Load</span><span class="pun">();</span><span class="pln">
       </span><span class="pun">}</span><span class="pln">
       </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">property_exists</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">,</span><span class="pln">$key</span><span class="pun">)){</span><span class="pln">
          </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$res = $this->'</span><span class="pun">.</span><span class="pln">$key</span><span class="pun">.</span><span class="str">';'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
          </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">$key</span><span class="pun">;</span><span class="pln">
       </span><span class="pun">}</span><span class="pln">
       </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
 
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> save</span><span class="pun">(){</span><span class="pln">
      </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID</span><span class="pun">)){</span><span class="pln">
          $sql </span><span class="pun">=</span><span class="pln"> </span><span class="str">"UPDATE "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_tableName</span><span class="pun">.</span><span class="str">" SET "</span><span class="pun">;</span><span class="pln">
          </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">arRelationMap </span><span class="kwd">as</span><span class="pln"> $k2 </span><span class="pun">=></span><span class="pln"> $v2</span><span class="pun">){</span><span class="pln">
              </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">array_key_exists</span><span class="pun">(</span><span class="pln"> $k2</span><span class="pun">,</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">_modifyMap</span><span class="pun">)){</span><span class="pln">
                  </span><span class="kwd">eval</span><span class="pun">(</span><span class="pln"> </span><span class="str">'$val = $this->'</span><span class="pun">.</span><span class="pln">$v2</span><span class="pun">.</span><span class="str">';'</span><span class="pun">);</span><span class="pln">
                  $sql_update </span><span class="pun">.=</span><span class="pln"$v2</span><span class="pun">.</span><span class="str">" = "</span><span class="pun">.</span><span class="pln">$val</span><span class="pun">;</span><span class="pln">
              </span><span class="pun">}</span><span class="pln">
          </span><span class="pun">}</span><span class="pln">
          $sql </span><span class="pun">.=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$sql_update</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="pln">strlen</span><span class="pun">(</span><span class="pln">$sql_update</span><span class="pun">));</span><span class="pln">
          $sql </span><span class="pun">.=</span><span class="pln"> </span><span class="str">'WHERE '</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">pk</span><span class="pun">.</span><span class="str">' = '</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
          $sql </span><span class="pun">=</span><span class="pln"> </span><span class="str">"INSERT INTO "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_tableName</span><span class="pun">.</span><span class="str">" ("</span><span class="pun">;</span><span class="pln">
          </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">arRelationMap </span><span class="kwd">as</span><span class="pln"> $k3 </span><span class="pun">=></span><span class="pln"> $v3</span><span class="pun">){</span><span class="pln">
              </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">array_key_exists</span><span class="pun">(</span><span class="pln"> $k3</span><span class="pun">,</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_modifyMap</span><span class="pun">)){</span><span class="pln">
                  </span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'$val = $this->'</span><span class="pun">.</span><span class="pln">$v3</span><span class="pun">.</span><span class="str">';'</span><span class="pun">);</span><span class="pln">
                  $field  </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"`"</span><span class="pun">.</span><span class="pln">$v3</span><span class="pun">.</span><span class="str">"`,"</span><span class="pun">;</span><span class="pln">
                  $values </span><span class="pun">.=</span><span class="pln"> $val</span><span class="pun">;</span><span class="pln">
              </span><span class="pun">}</span><span class="pln">
          </span><span class="pun">}</span><span class="pln">
          $fields </span><span class="pun">=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$field</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="pln">strlen</span><span class="pun">(</span><span class="pln">$field</span><span class="pun">)-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
          $vals   </span><span class="pun">=</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$values</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="pln">strlen</span><span class="pun">(</span><span class="pln">$values</span><span class="pun">)-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
          $sql </span><span class="pun">.=</span><span class="pln"> $fields</span><span class="pun">.</span><span class="str">" ) VALUES ("</span><span class="pun">.</span><span class="pln">$vals</span><span class="pun">.</span><span class="str">")"</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      echo $sql</span><span class="pun">;</span><span class="pln">
      </span><span class="com">//$this->_DB->query($sql);</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
   </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __destory</span><span class="pun">(){</span><span class="pln">
      </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">ID</span><span class="pun">)){</span><span class="pln">
         $sql </span><span class="pun">=</span><span class="pln"> </span><span class="str">"DELETE FROM "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_tableName</span><span class="pun">.</span><span class="str">" WHERE "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">pk</span><span class="pun">.</span><span class="str">" = "</span><span class="pun">.</span><span class="pln">$this</span><span class="pun">-></span><span class="pln">_ID</span><span class="pun">;</span><span class="pln">
        </span><span class="com">// $this->_DB_query($sql);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">User</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Model</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">protected</span><span class="pln">  </span><span class="kwd">function</span><span class="pln"> getTableName</span><span class="pun">(){</span><span class="pln">
       </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"test_user"</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getRelationMap</span><span class="pun">(){</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
                      </span><span class="str">'id'</span><span class="pln">       </span><span class="pun">=></span><span class="pln"> USER_ID</span><span class="pun">,</span><span class="pln">
                      </span><span class="str">'user_name'</span><span class="pun">=></span><span class="pln"> USER_NAME</span><span class="pun">,</span><span class="pln">
                      </span><span class="str">'user_age'</span><span class="pln"> </span><span class="pun">=></span><span class="pln"> USER_AGE
                    </span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> getDB</span><span class="pun">(){</span><span class="pln">
       </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">_DB</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
$UserIns </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">User</span><span class="pun">();</span><span class="pln">
print_r</span><span class="pun">(</span><span class="pln">$UserIns</span><span class="pun">);</span><span class="pln">
 
</span><span class="pun">?></span>
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

注册