Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> metody i zmienne statyczne, sposoby użycia
bliitz
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

Ostrzeżenie: (0%)
-----


Witam

Fragment przykładowej klasy:
  1. class Parse_Data
  2. {
  3. public $data = array();
  4. /**
  5.   * Create an instance of Parse_Data
  6.   *
  7.   * @staticvar empty $instance
  8.   * @return object
  9.   */
  10. public static function instance()
  11. {
  12. static $instance;
  13. empty( $instance ) AND $instance = new Parse_Data;
  14. return $instance;
  15. }
  16. /**
  17.   *
  18.   * @param array $post
  19.   * @param array $data
  20.   * @return boolean
  21.   */
  22. public function check( $post, array $data )
  23. {
  24. $this->data = new Validation( $post );
  25. $this->data->pre_filter( 'trim' );
  26. foreach( $data as $k => $v )
  27. {
  28. $this->data->add_rules( $k, $v );
  29. }
  30. return $this->data->validate();
  31. }
  32. }


i sposób w jaki chcę jej użyć:
  1. if( Parse_Data::check( $_POST, array( 'art_title' => 'required',
  2. 'art_content' => 'required',
  3. 'art_teen' => 'numeric' ) ) )


i teraz kilka pytań:
1. Dlaczego nie zwraca to błędu mimo iż check() nie jest statyczna?
2. W jaki sposób mogę dostać się do zmiennej $data z zewnątrz czyli coś w ten deseń Parse_Data::instance()->data ? ( oczywiście to nie działa tylko dlaczego )
3. Czy jedyny sposób do utworzenie zmiennej $data jako statycznej i odwołanie się do niej w postaci Parse_Data::$data czy pozostawienie jej zwykłą ( nie statyczną ) i utworzenie metody dzięki której będzie do niej dostęp ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bliitz
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

Ostrzeżenie: (0%)
-----


po przeczytaniu wyżej podlinkowanego arta zmodyfikowałem nieco i teraz jest:
  1. class Parse_Data
  2. {
  3. public static $data = array();
  4. private static $_instance = null;
  5.  
  6. private function __construct(){}
  7. /**
  8.   * Create an instance of Parse_Data
  9.   *
  10.   * @return object
  11.   */
  12. public static function instance()
  13. {
  14. if( is_null( self::$_instance ) )
  15. {
  16. self::$_instance = new Parse_Data();
  17. }
  18. return self::$_instance;
  19. }
  20. /**
  21.   *
  22.   * @param array $post
  23.   * @param array $data
  24.   * @return boolean
  25.   */
  26. public function check( $post, array $data )
  27. {
  28. self::$data = new Validation( $post );
  29. self::$data->pre_filter( 'trim' );
  30. foreach( $data as $k => $v )
  31. {
  32. self::$data->add_rules( $k, $v );
  33. }
  34. return self::$data->validate();
  35. }
  36. }


na moje oko ( niezbyt jeszcze wprawione (IMG:style_emoticons/default/tongue.gif) ) wydaję się ok i spełnia swoje zadanie.
Co do drugiego sposobu to nie chcę ładować tworzenia instancji klasy do nadrzędnego konstruktora bo nie będzie ona na każdej podstronie wykorzystywana, więc singleton wydaje mi się lepszym rozwiązaniem.

Ten post edytował bliitz 7.01.2010, 13:44:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 23:51