【问题标题】:How can I achieve this functionality with OOP?如何使用 OOP 实现此功能?
【发布时间】:2011-09-10 08:32:01
【问题描述】:

我把我的自卑心包裹在课堂上。通过查看其他人的代码并发现很难看出它与我自己的代码有何关系,它正在为此苦苦挣扎。我希望您可以通过将我拥有的 2 个简单函数转换为类来帮助我了解它是如何工作的,以便我可以看到一个相关的示例。

几个简单的函数:

function make_url_friendly($string) {

  $remove = array(',',' ','?','=','&','-','|');
  $replace = array('_','_','_','_','','_','');

  $string = strtolower(str_replace($remove,$replace,$string));  
  return $string;

}

function save_page($url) {

 $sql = 'INSERT INTO pages 
        SET url="' . mysql_real_escape_string(make_url_friendly($url)) . '" ';
 mysql_query($sql);

}


save_page('/questions/ask');

与这样的函数等效的 oop 可能是什么?

【问题讨论】:

    标签: php oop


    【解决方案1】:

    没有办法以 OOP 风格编写这么多的代码。

    您可以像在其他答案中一样用 OOP 语法伪装您的代码,但实际上不会有 OOP。

    make_url_friendly() 函数可以是函数。

    至于 save_page() 它可能是某个类的方法,但没人能说它是什么类,因为没人知道你的设置

    【讨论】:

    • 我明白了。感谢上校。我的设置通常是在 functions.php 文件中包含一堆这样的函数,我基本上在每个页面上都包含这个文件。它似乎完成了这项工作,我对此并没有真正的问题,我也不明白它的局限性。我似乎可以在其他函数中使用函数以避免重复。尽管如此,我还是想学习 OOP,以便了解我错过了什么。
    【解决方案2】:
    class URLHandler{
    
       // Class variables
       $url = "";
    
       // Constructors
       public URLHandler($newurl) {  // Old Style
          $this->__construct($newurl);
       }
    
       public __construct($newurl) {  // New Style
          $this->setUrl($newurl);
       }
    
       private function make_url_friendly($string) {
          $remove = array(',',' ','?','=');
          $string = strtolower(str_replace($remove,"_",$string));
          return $string;
       }
    
       public function save_page() {
          $sql = 'INSERT INTO pages 
            SET url="' . mysql_real_escape_string($this->url) . '" ';
          mysql_query($sql);
    
       }
    
       public function getUrl(){
          return $this->url;
       }
       public function setUrl($newurl){
          $this->url = $this->make_url_friendly($newurl);
       }
    };
    
    
    //save_page('/questions/ask');
    $somevar = new URLHandler("/questions/ask");
    $somevar->save_page();
    
    $somevar->setUrl("/answers/answer");
    $somevar->save_page();
    

    编辑:

    正如 Shef 在 cmets 中指出的那样,您确实希望将具有相似功能的项目分组到它们自己的类中。例如,所有对数据库执行某些操作的函数都将具有与处理表单错误检查的函数不同的类。

    因此,在您的示例中,make_url_friendlysave_page 属于不同的类

    【讨论】:

    • __construct(双下划线)。我认为save_page 应该在另一个类中,它是相关页面,所以它应该是类Page 中的一个函数。
    • 感谢__construct 的更正,我同意save_page 应该属于不同的类别。在这种情况下,我决定选择一个班级进行直接翻译。我想我应该添加一个解释。
    • 那么把东西放在“类”中是为了组织和访问吗?虽然我并不真正了解上面的所有内容,但它回答了一些事情。我正在查找类中私有函数和公共函数之间的区别。
    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多