Jump to content

Recommended Posts

I have a design setup created for my site background scripting functions that "hubs".  I'm moderately new to OOP so I'm not even sure if this is good design, but essentially I have a $hub object instantiated and the constructor for that class instantiates objects for each of my other classes so that I can then add one line at the top of every page that creates $hub as a new Hub and then call any function in any of my files through it (for example, to call sanitizeSession from my session class, I'd call $hub->session->sanitizeSession and then later I can call getUserInfo from the login class with $hub->login->getUserInfo, you get the picture.)  Yes, I know I'm trying to make OOP into the old goto procedural languages by my design, but it's comfortable for me to start with, I'll get more advanced as I learn, I'm sure, but here's my question.  Say, with this setup, I have called sanitizeSession from session using $hub->session->sanitizeSession - within the sanitizeSession function, how would I call "back" to another hub function, say $hub->login->functionIwant?  Do I have to pass $this to each of the instances I create at the construct of hub and use that object to call back?  I'm sure I can't use $this as it would actually call the object I'm in and not the "referring object".  Can I maybe make all the spokes of hub extensions of hub and call back that way?  How do I accomplish that?  Thanks for any help and thanks for understanding my noobishness :)

Link to comment
https://forums.phpfreaks.com/topic/208742-calling-an-object-in-a-referring-object/
Share on other sites

I guess it wasn't so much that I didn't understand that it was bad design and why, it was more than I received a few conflicting "rules" from advice here.  On the one hand I was told that you should keep object instantiations off your content pages, that it's supposed to happen in background scripts, okay, got it.  So I started doing that, but then I got told that instantiating objects after the class close bracket was also bad practice (even though I've seen it in more scripts than I can count).  Okay, so now I have to instantiate objects in the classes, as I use them and pass them as needed for use elsewhere, but then it got super complex trying to juggle all these objects floating out there after 9 or 10 function calls down the line, going back and trying to figure if I had already instantiated one of those and if I had passed it properly through the chain for use where I sit, oy.  Can someone point me to a good tutorial that teaches how to design these sorts of website programs?  If you need a reference to where I'm working from now, this is my design:

 

Hub ->

  - sessionIO (so I don't have to call session_start on every page, just instantiate it and run all session actions through it)

  - login (processes login functions, new user functions, merging accounts from facebook/twitter/etc, etc)

  - dbInterface (opens the connection and contains all database input/output functions

  - processInput (processes and traffic cops all form submissions)

  - validation (validates input, whether it be checking length, preg_matching, escaping, etc, usually called from processInput)

  - errorHandle (handles errors, adds to the error array, organizes multiple errors, traffic cops where to go for certain level errors, etc)

  - config (definitions for things I can reasonably assume will change from time to time such as DB_SERVER, DB_PASSWORD, options I can turn on and off, etc)

 

So all of those are instantiated by Hub, and hub is instantiated by each page, and I call functions through it.  Am I even anywhere close to the right path or should I scrub everything and start over?  Any pointers on how?

 

Thanks for any assistance.

The best advice I could give to learn OOP is to use one of the already existing OOP frameworks. Even if you end up rollong your own (as I did) a well designed framework will teach you allot.

 

Zend was where I started but it has a pretty steep learning curve. There's plenty of others around though.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.