2011-09-10 3 views
0

Я обволакиваю свой худший ум вокруг классов. Он борется с этим, смотря на код других людей, и ему трудно понять, как это связано с моим собственным кодом. Я надеюсь, что вы можете помочь мне понять, как это работает, превратив две простые функции, которые у меня есть в классы, чтобы я мог видеть пример, который можно использовать.Как достичь этой функциональности с помощью ООП?

Простая пара функций:

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'); 

Что может быть ООП, эквивалентные функции, как это?

ответ

0
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("https://stackoverflow.com/questions/ask"); 
$somevar->save_page(); 

$somevar->setUrl("/answers/answer"); 
$somevar->save_page(); 

Edit:

Как Shef отметил в комментариях, вы действительно хотите, чтобы сгруппировать элементы подобной функции в их собственном классе. Например, все ваши функции, которые что-то делают с БД, будут иметь класс, отличный от ваших функций, которые обрабатывают проверку ошибок формы.

Поэтому в вашем примере make_url_friendly бы в другом классе от save_page

+0

'__construct' (двойное подчеркивание). Я думаю, что 'save_page' должен быть в другом классе, это связанные страницы, поэтому он должен быть функцией внутри класса' Страница'. – Shef

+0

Спасибо за исправление '__construct', и я согласен, что' save_page' должен быть в другом классе. В этом случае я решил пойти с одним классом, чтобы сделать прямой перевод. Наверное, я должен был добавить объяснение. –

+0

Так что вещи в «классах» предназначены для организации и доступа? Хотя я не совсем понимаю все, что выше его ответа, некоторые вещи. Я просматриваю разницу между частными и публичными функциями внутри классов. – willdanceforfun

2

нет никакого способа, чтобы сделать такой кусок кода в ООП-стиле.

Вы можете замаскировать свой код в синтаксисе ООП, как в другом ответе, но не будет ООП в реальности.

Функция make_url_friendly() в порядке, являющаяся функцией.

Что касается save_page(), это может быть метод какого-либо класса, но никто не может сказать, что класс это может быть, как никто не знает вашу установку

+0

Я вижу. Спасибо за это Col. Моя настройка, как правило, содержит кучу таких функций в файле functions.php, и я в основном включаю этот файл на каждую страницу. Кажется, что эта работа, и у меня нет проблем с этим, и я тоже не понимаю ограничений. Кажется, я могу использовать функции в других функциях, чтобы избежать повторения. Тем не менее, я хотел бы узнать ООП, чтобы я мог понять, чего я пропускаю. – willdanceforfun

Смежные вопросы