login  Naam:   Wachtwoord: 
Registreer je!
 Forum

class in elkaar gebruiken

Offline cyberninjah - 18/05/2010 12:30
Avatar van cyberninjahLid Ik ben bezig met classes te maken.
Nu heb ik een ideetje wat ik wel makkelijk zou vinden werken maar heb geen idee hoe ik dit moet aanpakken.

Ik heb een Class Template
Deze class zorgt er voor dat hij me html files uit me template pakt en gebruikt etc.

Om functies te maken in deze class zo dat in me template {function_name} werkt.

Moet ik de functies in de class template hebben.

Is het mogelijk om meerdere class aan de template class te koppelen ??

Voorbeeld

class login
class menu

zo dat ik gewoon in alle class alle functies kan gebruiken uit de class login ,menu , template ??

13 antwoorden

Gesponsorde links
Offline marten - 18/05/2010 12:40 (laatste wijziging 18/05/2010 12:42)
Avatar van marten Beheerder Dit kan je doen met extend

  1. class a extends b {
  2.  
  3. }


daarnaast heb je een aantal overloading regels:

public ---> deze worden meegenomen
private --> deze worden niet meegenomen
protected --> deze worden niet meegenomen
Offline jasper56 - 18/05/2010 12:44 (laatste wijziging 18/05/2010 12:46)
Avatar van jasper56 Nieuw lid stel je hebt de klas template,
en die klas wil je gebruiken bij de class home
dan doe je het volgende:
  1. class template{
  2. function __construct(){
  3.  
  4. }
  5.  
  6. public function naarScherm($data){
  7. print_r($data);
  8. }
  9. }
  10.  
  11. class home extends template{
  12. function __construct(){
  13. $this->naarScherm('test');
  14. }
  15. }

Offline Erwt - 18/05/2010 12:57
Avatar van Erwt PHP beginner Ik weet niet of het toegestaan is maar dan heb ik nog een vraagje.

Mijn class home bijvoorbeeld, die extend al 'BaseController', en daar maakt hij mijn template class handmatig aan. Als ik in BaseController dan mijn Template class extend dus:

Home->BaseController->Template

Kent mijn Home class dan met $this de methodes uit de Template class ook?
Offline jasper56 - 18/05/2010 13:34
Avatar van jasper56 Nieuw lid als je zo iets bedoeld:
  1. <?php
  2.  
  3. /**
  4.  * @author Jasper
  5.  * @copyright 2010
  6.  */
  7.  
  8. class template{
  9. function __construct(){
  10.  
  11. }
  12.  
  13. public function naarScherm($data){
  14. print_r($data);
  15. }
  16. }
  17.  
  18. class baseController extends template{
  19. function __construct(){
  20.  
  21. }
  22. }
  23.  
  24. class home extends baseController{
  25. function __construct(){
  26. $this->naarScherm('test');
  27. }
  28. }
  29.  
  30. $test = new home;
  31.  
  32.  
  33.  
  34. ?>


Dat kan gewoon.
Bedankt door: Erwt
Offline Erwt - 18/05/2010 14:03
Avatar van Erwt PHP beginner Dit bedoel ik, dankje jasper!
Offline cyberninjah - 18/05/2010 16:09
Avatar van cyberninjah Lid Hmm dus ik moet me class extende in een soort trein effect

ik kan niet zeggen extends alles op de class Template
Offline jasper56 - 18/05/2010 16:19
Avatar van jasper56 Nieuw lid @cyberninjah
Hoe bedoel je dat precies???
Offline cyberninjah - 18/05/2010 16:32
Avatar van cyberninjah Lid Voorbeeldje hoe ik me Template class nu gebruik.


  1. $tpl->assign(array(
  2. 'title' => $settings['website']['sitename'],
  3. 'url' => $settings['website']['url'],
  4. 'sidebar' => $tpl->sidebar($urloptions),
  5. 'stats' => $tpl->stats(),
  6. 'menu' => $tpl->menu(),
  7. 'leftbar' => $leftbar->show(),
  8. 'usermessage' => $tpl->user_message(),
  9. 'template' => $settings['website']['url'].'/templates/'.$settings['website']['template'].'/',
  10. 'content' => $tpl->load_content($urloptions)
  11. ));


dit wil ik in de functie zelf gaan doen maar dan moet ik bv me login class in de Template class kunnen gebruiken.

zo dat check_login() bv in de template gebruikt kan worden.


nu kan ik class login extends Template doen.

Maar hoe moet dat verder met me anderen classe ??
Offline Erwt - 18/05/2010 16:34 (laatste wijziging 18/05/2010 16:36)
Avatar van Erwt PHP beginner @Cyberninjah

Op gegeven moment wil je dat je bij alle controllers(classes) bepaalde dingen kunt doen, daarom heb ik een class BaseController die ik bij elke controller extend. In die BaseController zet ik dan weer alles, wat ik in elke controller wil gebruiken. Zo voorkom ik dat ik 20x hetzelfde typ in elke controller, maar extend ik telkens de BaseController.

In BaseController kan ik dan weer Smarty (of je eigen Template class) extenden, en die functies gebruiken binnen bijv je home controller.

Edit: bovenstaande nog niet gezien.
Offline jasper56 - 18/05/2010 19:43
Avatar van jasper56 Nieuw lid
  1. <?php
  2.  
  3. /**
  4.  * @author Jasper
  5.  * @copyright 2010
  6.  */
  7.  
  8. class template{
  9.  
  10. public function naarScherm($data){
  11. if(is_array($data)){
  12. print_r($data);
  13. }
  14. else{
  15. echo $data;
  16. }
  17. }
  18. }
  19.  
  20. class baseController{
  21. public $tpl;
  22.  
  23. public function keerTwee($getal){
  24. $tpl = new template;
  25. if(is_numeric($getal)){
  26. $getal = $getal*2;
  27. $tpl->naarScherm($getal);
  28. }
  29. else{
  30. $tpl->naarScherm('Je kan alleen maar getalen gebruiken bij deze functie');
  31. }
  32. }
  33. }
  34.  
  35. class home{
  36. private $tpl;
  37. private $baseController;
  38.  
  39. function __construct(){
  40. $tpl = new template;
  41. $baseController = new baseController;
  42. $tpl->naarScherm('Twee keer twee is: ');
  43. $baseController->keerTwee(2);
  44.  
  45. }
  46. }
  47.  
  48. $test = new home;
  49.  
  50.  
  51.  
  52. ?>


Heb even snel een voorbeeldje gemaakt, denk dat jullie zo iets bedoelen??
Offline Erwt - 19/05/2010 10:05
Avatar van Erwt PHP beginner Mij had je al geholpen, ik maak mijn template class gewoon een extend van mijn basecontroller, dus dan hoef ik hem ook niet aan te maken.
Offline jasper56 - 19/05/2010 13:27
Avatar van jasper56 Nieuw lid over het algemeen heb je een template class, die je extend bij bijv. een login class.
Daar tussen zou nog een basecontroller kunnen zitten.

Maar wat jij bedoelt kan met het script wat ik hiervoor heb gepost.
alleen dan moet je de template class nemen en daarin de rest opnemen.
bijv. zo:
  1. <?php
  2.  
  3. /**
  4.  * @author Jasper
  5.  * @copyright 2010
  6.  */
  7.  
  8. class template{
  9. private $baseController;
  10. private $home;
  11. private $menu;
  12.  
  13. function __construct(){
  14. $baseController = new baseController;
  15. $home = new home;
  16. $menu = new menu;
  17. $this->naarScherm($baseController->getNaam());
  18. $this->naarScherm($home->getNaam());
  19. $this->naarScherm($home->getNaam());
  20. }
  21.  
  22. public function naarScherm($data){
  23. if(is_array($data)){
  24. print_r($data);
  25. }
  26. else{
  27. echo $data;
  28. }
  29. }
  30. }
  31.  
  32. class baseController{
  33.  
  34. public function getNaam(){
  35. return "baseController class";
  36. }
  37. }
  38.  
  39. class home{
  40.  
  41. public function getNaam(){
  42. return "Home class";
  43.  
  44. }
  45. }
  46.  
  47. class menu{
  48.  
  49. public function getNaam(){
  50. return "Menu class...";
  51. }
  52. }
  53.  
  54. $test = new template;
  55.  
  56.  
  57.  
  58. ?>
Offline Arphetic - 19/05/2010 21:34 (laatste wijziging 19/05/2010 23:28)
Avatar van Arphetic Nieuw lid Ik denk dat het volgende artikel je misschien wel kkan helpen...
http://www.devs...PHP-Part-I/
http://www.devs...HP-Part-II/

Sorry, verkeerd begrepen, maar misschien kunnen m'n links je wel met andere dingen helpen ;) Het artikel wat over inheritant classes gaat en andere leuke dingen met classes is
http://www.devs...HP-Classes/
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.237s