Някой може ли да ми обясни защо трябва да пиша на OOP?

Така....
Започнах да уча OOP и бих казал, че ми е горе/долу ясно за какво става на въпрос.
Написах си едно малко класче за проверка на валиден мейл, но не мисля, че трябва да е точно така, защото не съм виждал класове, в които да се извеждат текстове по този начин.
Ето го и него:
PHP:
<?php

/**
 * Validation Class by tedo96
 * */

class Validate {
    function Email($email) {
        $email = strtolower($email);
        if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)) {
            echo 'pozwolen';
        } else {
            echo 'ne';
        }
    }
}
$validate = new Validate();
$validate->Email('dasdas@asdad.bg');

?>
Ако може да ми кажете къде точно бъркам.
 
Мисля, че не е добра идея да използваш echo директно в методите. По-скоро нещо от този род:
PHP:
<?php

/**
 * Validation Class by tedo96
 * */

/*
  * retrtn true - valid email
  * return false - invalid email
  */
class Validate {
    function Email($email) {
        $email = strtolower($email);
        if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email))
            return true;
        return false;
    }
}
$validate = new Validate();
if($validate->Email('dasdas@asdad.bg'))
    echo 'Позволен';
else
    echo 'Бъркаш някъде ;)';
?>
Някой по-опитен с ООП, ако има да допълва, че и аз от скоро съм на тази вълна. :)
 
Код:
<?php

/**
 * Validation Class by tedo96
 * */

/*
  * retrtn true - valid email
  * return false - invalid email
  */
class Validate {
    function Email($email) {
        $email = strtolower($email);
        if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)){
            return true;
		}else{
			return false;
		}
    }
}
$validate = new Validate();
if($validate->Email('dasdas@asdad.bg') == true){
    echo '????????';
	}
else if($validate->Email('dasdas@asdad.bg') == false){
    echo '?????? ?????? ';
	}
?>
 
ArchangelS, има ли някаква съществена разлика?
Старах се да е максимално опростено и ясно (поне от моята гледна точка).
 
@ArchangelS това е пример за излишно използване на ресурс. Защо трябва два пъти да викаш функцията? За целта има else.

По темата - функцията в класа е хубаво да има модификатор, тоест в твоя случай "public". В PHP не е задължително, но е best practice да го имаш.

Другото, за което се сещам (но предполагам, че като начинаещ в ООП само ще те объркам) е, че такива проверяващи функции и изобщо функции, които не ползват променливи или методи в самия клас е хубаво да са статични. Няма смисъл за такава функция да се прави нова инстанция на целия клас.
 
Зависи какви проверки иска да прави, това е примерен код, той преценя как да го използва. Ако има повече от 1 случая .
 
ArchangelS каза:
Зависи какви проверки иска да прави, това е примерен код, той преценя как да го използва. Ако има повече от 1 случая .

Въпроса беше, че викаш въпросната функция 2 пъти, което е безсмислено.
 
Тук може и с елсе, но ако имаш повече от 2 ретърна ? За това го направих така.И затова казах че той си преценява как да го използва..
 
ArchangelS каза:
Тук може и с елсе, но ако имаш повече от 2 ретърна ? За това го направих така.И затова казах че той си преценява как да го използва..

Ако има повече от 2 "ретърна" ще си запазиш резултата в променлива и тогава ще проверяваш.

Давай добри примери, не нещо, което е пример, ама той да го преправя после. От къде ще знае, че това не е препоръчително?
 
Код:
<?php
/*
class o_Validate
@creator Georgi Bancov
*/

class o_Validate
{
	public static function m_Exists($varVariant,$strWarnText)
	{
		if(empty($varVariant))
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	public static function m_isEquality($varFirst, $varSecond)
	{
		if($varFirst == $varSecond)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public static function m_isFormatZip($strText)
	{
		if(!ereg("^[0-9]{5}(\-[0-9]{4})?$", $strText))
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	public static function m_isFormatEmail($strText)
	{
		if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$",$strText))
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	public static function m_isFormatDate($strDate,$strFormat,$charDelim)
	{
		$arrDateSet = explode($charDelim,$strDate);
		$arrFormatSet = explode($charDelim,$strFormat);
		
		$strFormat = str_replace("dd","([0-9]{1,2})", $strFormat);
		$strFormat = str_replace("mm","([0-9]{1,2})", $strFormat);
		$strFormat = str_replace("yyyy","([0-9]{4})", $strFormat);
		$strFormat = str_replace("yy","([0-9]{2})", $strFormat);
		
		if(!ereg($strFormat,$strDate))
		{
			return false;
		}
		
		if($arrFormatSet[0] == "dd")
		{
			$intMonth = 1;
			$intDay = 0;
		}
		else
		{
			$intMonth = 0;
			$intDay = 1;
		}

		if(!checkdate($arrDateSet[$intMonth], $arrDateSet[$intDay], $arrDateSet[2]))
		{
			return false;
		}
		
		return true;
	}
	
	public static function m_isRangeLength($strText,$intMin,$intMax)
	{
		if(strlen($strText) <= $intMax && (strlen($strText) >= $intMin))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public static function m_isRangeNumber($intNumber)
	{	
		if(is_numeric($intNumber) && $intNumber > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public static function m_isRangeDate($strDate,$strFormat,$charDelim,$strBefore="",$strAfter="")
	{
		$intDateTS = strtotime($arrDateSet[$intMonth]. "/". $arrDateSet[$intDay]. "/". $arrDateSet[2]);
		
		if($strBefore == "")
		{
			$intBeforeTS = mktime() - 567648000;
		}
		else
		{
			$arrBeforeSet = explode($charDelim,$strBefore);
			
			$intBeforeTS = strtotime($arrBeforeSet[$intMonth]. "/". $arrBeforeSet[$intDay]. "/". $arrBeforeSet[2]);
		}
		
		if($intDateTS > $intBeforeTS)
		{
			return false;
		}
		
		if($strAfter != "")
		{
			$arrAfterSet = explode($charDelim,$strAfter);
			
			$intAfterTS = strtotime($arrAfterSet[$intMonth]. "/". $arrAfterSet[$intDay]. "/". $arrAfterSet[2]);
		
			if($intDateTS < $intAfterTS)
			{
				return false;
			}
		}
		
		return true;
	}
	
	public static function m_modDate($strDate,$strFormatIn,$charDelim,$strFormatOut)
	{
		$dateDate = date($strFormatOut,$intDateTS);
		
		return $dateDate;
	} 
}
?>

Ето един Validation клас, който така да се каже извадих от прахта (макар, че на места го ползвам).
 
@bancov96

Код:
public static function m_Exists($varVariant,$strWarnText)
   {
      if(empty($varVariant))
      {
         return false;
      }
      else
      {
         return true;
      }
   }

Защо ти е 2рата променлива, тя не се ползва.Тва го има и в други функции.

И в такива случай

Код:
 if(empty($varVariant))
      {
         return false;
      }
      else
      {
         return true;
      }

по-добре не слагай else, а направо return true.
Код:
 if(empty($varVariant))
      {
         return false;
      }

      return true;

Функцията checkdate я нямаш в класа, сложи я в класа и ползвай $this->checkdate, в твоя случай класа ти е със static, затова го смени със self::checkdate.

Научи се да слагаш 4 празни места (TAB в notepad++ и TABx2 в notepad2) между кодовете и винаги слагай коментарите в Doc-Block формат, демек само с /* */.Ако правиш клас, който няма да се ползва само от тебе, слагай и коментари за всяка функция, какво прави функцията, @param и @return параметри.

Код:
/*
  * Функцията прави еди кво си..
  *
  * @param bool $debug
  *
  * @return boolean 
  *
  */

За да не пишеш такива дълги имена на функциите и за да няма дублиране е много хубаво да научите как да ползвате namespace.Погледнете в php.net
 
Благодаря!
Това за echo-тата го разбрах малко след като пуснах темата.
Задължително ли е винаги да се връща true/false или може например някакви променливи $check/$error и после да им задавам някакви стойности например
$error = 'Невалиден майл!';
и после само да е извеждам.
 
tedo96 каза:
Благодаря!
Това за echo-тата го разбрах малко след като пуснах темата.
Задължително ли е винаги да се връща true/false или може например някакви променливи $check/$error и после да им задавам някакви стойности например
$error = 'Невалиден майл!';
и после само да е извеждам.

Всичко може да връщаш, не е задължително само bool.
 
Може, разбира се. :) Зависи каква ти е целта. С ture/false ще ти е по-лесна валидацията на някоя форма, например. За това го написах така.
Иначе, представи си следната ситуация:
Подаваш id на някой страница на метода и той трябва да върне съдържанието ѝ, заглавието, автора и т.н.
Тогава най-лесно е да върнеш един масив със всички данни, а методът ти ще е просто една SQL заявка.
 
@alex3 ако става на въпрос тази функция m_Exists е напълно излишна. А ако решиш да я правиш може и само това да сложиш вътре. Без каквито и да е ифове:

PHP:
return !empty($varVariant);
 

Back
Горе