Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Programowanie obiektowe, Includowanie JS ( funkcja )
Forum PHP.pl > Forum > Przedszkole
seba22
Cześć!

Postanowiłem że zacznę się uczyć programowania obiektowego.

Żeby nie bawić się w przykłady typu "wkręć żarówkę", postanowiłem zrobić coś pożytecznego, a mianowicie generowanie HEAD strony www (takie coś zawsze może się przydać) więc lepiej mieć w swoim toolboxie.

Zrobiłem sobie klasę


  1. <?php
  2. class serwis_nexus_pl
  3. {
  4.  
  5.  
  6.  
  7. public function drukuj_tytul()
  8. {
  9.    echo("<title>$this->tytul</title>");
  10. }
  11.  
  12. public function drukuj_opis()
  13. {
  14.    echo("<meta name='description' content='$this->opis'>");
  15. }
  16.  
  17. public function drukuj_slowakluczowe()
  18. {
  19.    echo("<title>$this->slowa_kluczowe</title>");
  20. }
  21.  
  22. public function drukuj_includuj_javascript()
  23. {
  24.    print('<script type="text/javascript" src="'.$this->includuj_javascript.'"></script>');
  25.  
  26. }
  27. public function drukuj_includuj_css()
  28. {
  29.    print(' <link rel="stylesheet" type="text/css" href="'.$this->includuj_css.'" media="screen" />');
  30. }
  31.  
  32. public function wydrukujSerwis()
  33. {
  34.  
  35. print('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">');
  36. print('<html lang="pl" dir="ltr">');
  37. print('<head>');
  38. print('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">');
  39.    $this->drukuj_tytul();
  40.    $this->drukuj_opis();
  41.    $this->drukuj_slowakluczowe();
  42.    $this->drukuj_includuj_javascript();
  43.    $this->drukuj_includuj_css();
  44. print('</head>');
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52. }
  53.  
  54.  
  55.  
  56.  
  57. }
  58.  
  59. $glowna_strona= new serwis_nexus_pl();
  60. $glowna_strona->tytul='Mój tytuł strony www';
  61. $glowna_strona->opis='ala ma kota a kot ma aids';
  62. $glowna_strona->slowa_kluczowe='kot psot myszka';
  63. $glowna_strona->includuj_javascript='jquery.js';
  64. $glowna_strona->includuj_css='wordcloud.css';
  65. $glowna_strona->includuj_css='css.css';
  66.  
  67. $glowna_strona->wydrukujSerwis();
  68.  
  69. ?>



Problemem jest, że jak wpisuje :
  1. <?php
  2. $glowna_strona->includuj_css='wordcloud.css';
  3. $glowna_strona->includuj_css='css.css';
  4. ?>


To nadpisuje mi, wartość pola CSS i drukowane jest samo "css.css".

To jest logiczne, bo w "wydrukuj serwis" zrobiłem sobie
  1. <?php
  2. $this->drukuj_includuj_css();
  3. ?>

A to pole, będzie zawierać tylko jeden ostatni element.
Ponowne wywołanie, nadpisuje pierwszy.

Czy ktoś ma jakiś pomysł jak to ominąć tak abym mógł dodawać "dowolną ilość razy" css ?
Z tym że nie ma to być "funkcja" która po prostu wydrukuje w momencie wywołania.
Wydrukowanie ma być na moje żądanie na końcu generowania strony, kiedy będę znać słowa kluczowe itp.


Będę wdzięczny za poradę smile.gif
skowron-line
A o tablicach i rekurencji nie słyszałeś questionmark.gif
seba22
Tablica to chyba rozwiązanie "nie nowoczesne". Myślałem o czymś na miarę PHP5. A nie cofaniu się w 4.
kamil4u
Zastosuj tablice - tzn. gdy dodajesz jakiś plik wsadzasz jego nazwę to tablicy, a przy drukowaniu "przelatujesz" przez całą tablicę

--EDIT--
Nienowoczesne powiadasz - to używanie pętli, zmiennych itd. też uważasz za nienowoczesne ?
seba22
Pytanie pomocnicze.

Jak przelecieć tablicę ?

Wybacz, ja programowałem w innym języku.

Mamy tablicę
tablica['xxx'];
tablica['ppp'];

Jak to przelecieć ?
Jak dać pętle od a - z długości 3 znaki ?
Przecież to będzie jak łamanie metodą brute force. Zabije tym php ?


//kamil4u
Nie to miałem na myśli.
Nie nienowoczesne w ten sposób, myślałem żeby było jakoś bardziej światowo.
skowron-line
array_walk
Tu ten przykład powinien Cie zainteresować jak ustawić callback w klasie.
  1. to array_walk with a function defined in a class, try this:
  2.  
  3. <?php
  4. // An example callback method
  5. class MyClass {
  6.    static function myCallbackMethod($data) {
  7.        return $data.$data;
  8.    }
  9. }
  10.  
  11. $my_array = array('one','two','three');
  12.  
  13. // Static class method cal
  14. array_walk($my_array,array('MyClass', 'myCallbackMethod'));
  15. ?>
  16.  
  17. returns array('oneone','twotwo','threethree');
  18.  
  19. code from: <a href=\"http://uk.php.net/manual/en/language.pseudo-types.php\" target=\"_blank\">http://uk.php.net/manual/en/language.pseudo-types.php</a>
  20.  
  21. thought it would be useful here.

foreach

Cytat
Tablica to chyba rozwiązanie "nie nowoczesne".

Nie jest nowoczesne jest stare jak świat, ale ponad czasowe.
Fifi209
Jeżeli chcesz pisać "na miarę php5", to zaczynamy:

Gdzie masz konstruktor i destruktor tej biednej klasy?
Wiesz, że polskie nazewnictwo zmiennych i metod jest niezgodne z przyjętymi standardami?

Co do pytania, tablica + foreach (tak na miarę php5)

Dodam jeszcze jedną cenną uwagę, funkcje nie powinny wyrzucać nic przez echo tylko przez retrun.
(Czemu? A nie mam ochoty tłumaczyć, znajdź w google albo na forum bo było to setki razy)

Poza tym tytuł ma się nijak do treści, piszesz o "includowaniu js" w temacie a w poście o problemach z css.

P.S. To też nie jest poprawne: (dla przykładu to)
  1. <?php
  2. echo("<title>$this->tytul</title>");
  3. ?>


Powinno być bardziej:
  1. <?php
  2. echo('<title>'.$this->tytul.'</title>');
  3. ?>


Łączenie stringów - podstawa!
Ale jak wspomniałem wcześniej w klasie używa się return.
seba22
Dziękuję bardzo Panie kamil4u.

Użycie pętli okazało się genialnym rozwiązaniem.

  1. <?php
  2. $glowna_strona->includuj_css['chmura']='/css/wordcloud.css';
  3. $glowna_strona->includuj_css['style']='css.css';
  4. ?>


I drobna modyfikacja

  1. <?php
  2. public function drukuj_includuj_css()
  3. {
  4.  
  5.  
  6. foreach ($this->includuj_css as $element)
  7. {
  8. print(' <link rel="stylesheet" type="text/css" href="'.$element.'" media="screen" />');
  9. }
  10.  
  11. }
  12. ?>



Działa "BOSKO" smile.gif
Fifi209
Cytat(seba22 @ 19.07.2009, 11:31:38 ) *
Dziękuję bardzo Panie kamil4u.

Użycie pętli okazało się genialnym rozwiązaniem.

Działa "BOSKO" smile.gif


Mojego posta chyba w ogóle nie czytałeś, albo nie zamierzasz zastosować się do żadnej z rad co w konsekwencji nauczy Cię złych zwyczajów. (w pisaniu obiektowym)
seba22
Ależ zastosowałem się.

$glowna_strona
zmieniłem na
$homepage

Witamy w Unii
Fifi209
Cytat(seba22 @ 19.07.2009, 11:39:58 ) *
Ależ zastosowałem się.

$glowna_strona
zmieniłem na
$homepage

Witamy w Unii


A reszta? Nazwy metod(funkcji) ? Return'y ?
seba22
Return używa się tylko i wyłącznie jeżeli chcemy przekazać zmienną liczbową bądź wartość tekstową.

przykład:
1
2
50
kot
seba22
piec

Wtedy dajemy return.

(if jakasfunkcja($jakaswartosc)=='seba22')
{
print('Fajny gościu');
}

Jeżeli chcemy napisać samo fajny gościu, to co zrobimy taką funkcję.

function fajny_gosciu()
{
return "fajny gosciu";
}

i wywolanie

print(fajny_gosciu());


Do tego służy return i print.
Jedno zwraca swoją wartość do funkcji kiedy potrzebujemy je porównać .
Inne po prostu wydrukuje na ekranie.

I wszystko w tym temacie.
Fifi209
<rotfl>

Po 1. print jest wolniejsze od echo, jeżeli nie wierzysz zmierz czas na pętli for od 0 do 100000

Co do return, właśnie dzięki temu staje się bardziej uniwersalna.

Ew. możesz zrobić zmienną np. public $content;
i tam wrzucać całą treść i na dodać metodę magiczną:

  1. <?php
  2. public function __toString() {
  3. return $this->content;
  4. }
  5. ?>


potem tylko:
  1. <?php
  2. echo $obiekt;
  3. ?>
seba22
W sumie racja.

Nie uwierzysz ale 2 dni temu przepisałem cały serwis żeby używał print.

Cały czas miałem wrażenie że print jest szybszy bo to wstawka z innego języka. Zacząłem teraz przeglądać Google, i faktycznie "echo jest szybsze".

Możesz mi powiedzieć jaka jest różnicą techniczna między Print a Echo ?
Czemu nie mogą zrobić symlinka z print do echo, i będzie taka sama wydajność ?
kamil4u
Print i echo zwracają inne wartości - więcej w manual-u tongue.gif
seba22
No nic stary, temacik zamykamy ^^
Bo już zboczyliśmy smile.gif


Boże, właśnie zobaczyłem że wszędzie piszę print i echo w nawiasach choć to nie funkcja :/
Oj niedobrze...
Fifi209
Cytat(seba22 @ 19.07.2009, 12:02:04 ) *
W sumie racja.

Nie uwierzysz ale 2 dni temu przepisałem cały serwis żeby używał print.

To chyba nie wielki problem, przynajmniej nie z edytorem, którego ja używam. (Jest to notepad++ i załatwiłbym to wyrażeniami regularnymi)

Cytat(seba22 @ 19.07.2009, 12:02:04 ) *
Cały czas miałem wrażenie że print jest szybszy bo to wstawka z innego języka. Zacząłem teraz przeglądać Google, i faktycznie "echo jest szybsze".

Ludzie popełniają błędy.

Cytat(seba22 @ 19.07.2009, 12:02:04 ) *
Możesz mi powiedzieć jaka jest różnicą techniczna między Print a Echo ?

Po części dostałeś odpowiedź ja bym tylko dodał, że echo to właściwie nie jest funkcja tylko element składni języka popatrz jak można go użyć:
  1. <?php
  2. echo('tekst');
  3.  
  4. // lub
  5.  
  6. echo 'tekst';
  7. ?>

Z print'em już tak nie zrobisz.


Cytat(seba22 @ 19.07.2009, 12:02:04 ) *
Czemu nie mogą zrobić symlinka z print do echo, i będzie taka sama wydajność ?

Po co komu dwie funkcje o takim samym działaniu i innej nazwie? smile.gif
Poza tym mało kto korzysta z print'a.
kamil4u
Cytat
Z print'em już tak nie zrobisz.

@fifi209: http://pl2.php.net/print

Cytat
Boże, właśnie zobaczyłem że wszędzie piszę print i echo w nawiasach choć to nie funkcja :/
Oj niedobrze...

Bez różnicy smile.gif
Fifi209
Cytat(kamil4u @ 19.07.2009, 12:18:59 ) *
@fifi209: http://pl2.php.net/print
Bez różnicy smile.gif


Faktycznie, moje niedopatrzenie. Może dla tego, że nigdy nie używałem print'a haha.gif
Albo po prostu pomyliło mi się z printf i cout w c++ bo one tam działają inaczej. ;p
Cysiaczek
Bez jaj - to nie OOP smile.gif
Przenoszę na Przedszkole
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.