jonniejoejonson Posted September 17, 2009 Share Posted September 17, 2009 I am trying to create a page that uses both ajax and classes. The classes are defined on the main page php page. The ajax request is sent to an external php script. My problem is that the external script does not have access to the classes and objects defined in the main php script... this means, top use a class i have to redefine the class in the external script... which also means i can't intereact with the objects cerated in the main script... Is there anyway to do this... or do you simply not use classes with ajax?... kind regards... J. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/ Share on other sites More sharing options...
kickstart Posted September 17, 2009 Share Posted September 17, 2009 Hi When the AJAX script is run the main script has finished and everything has been discarded so there are no classes to use. If you want them then you would have to recreate them in the AJAX script. What you can try is to store the class in a session variable, so your AJAX script just does a sesion_start() and then . This is meant to work but I am a bit dubious about storing large amounts of data in session variables. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920030 Share on other sites More sharing options...
trq Posted September 17, 2009 Share Posted September 17, 2009 Sounds like you need to rethink your design. If your 'external script does not have access to the classes and objects defined in the main php script', then how exactly did you ever plan on using the classes within it? Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920037 Share on other sites More sharing options...
TeNDoLLA Posted September 17, 2009 Share Posted September 17, 2009 Would be good to create own file for the class and include the class everywhere where it is needed. Also would there be some problems if one created the object of that class in main php page and put it in session and then use the sessioned object in the ajax page? Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920039 Share on other sites More sharing options...
kickstart Posted September 17, 2009 Share Posted September 17, 2009 Hi What you can try is to store the class in a session variable, so your AJAX script just does a sesion_start() and then . This is meant to work but I am a bit dubious about storing large amounts of data in session variables. There is an example of storing an object in a variable and then extacting it again on the serialize function page on the php site:- http://us.php.net/manual/en/function.serialize.php All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920040 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 Firstly thanks for all your responses... So the answer is as i understand it... i can use ajax to effect the objects created by classes but first i must make SESSIONS of the objects, so that they are accessable to the external php scripts called by ajax... This leads me to my next question:... this deos not work... $user_object=new userClass(); $_SESSION['user_object']=$user_object; I can not access the SESSION objects attributes... however it does works if i use: $_SESSION['user_object']=new userClass(); ... can anyone explain why? regards J Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920611 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi Couple of things. You need to serialise the objects before saving them in a session variable, and unserialise them to use them. Also the declares for the classes need to go before the session_start it seems . Not tried it so I will go and have a play (not sure how much data is not going to be changed by other users between pages and so which would be suitable for storing in an object). All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920625 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi Quick play and this appears to work. <?php class SomeClass { private $SomeData; function __construct() { $SomeData = 0; } function setSomeData($InField) { $RetField = false; if (is_numeric($InField)) { $this->SomeData = $InField; $RetField = true; } return $RetField; } function getSomeData() { return $this->SomeData; } } session_start(); if (isset($_SESSION['SomeClass'])) { echo "Existing Class"; $SomeClass = unserialize($_SESSION['SomeClass']); } else { echo "New Class"; $SomeClass = new SomeClass(); } $SomeClass->setSomeData($SomeClass->getSomeData() + 5); echo "*".$SomeClass->getSomeData()."*<br />"; $_SESSION['SomeClass'] = serialize($SomeClass); ?> All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920632 Share on other sites More sharing options...
RichardRotterdam Posted September 18, 2009 Share Posted September 18, 2009 Just curious but what is it that the script is suppose to do. Instantiating a PHP object and storing it in a session doesn't really seem right. Couldn't you simply instantiate a new object in your ajax script? Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920637 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi I would presume if you want to store some data that was fairly complex to calculate, and you want to avoid recalculating it. Eg, something like an insurance price comparison site where you can use Ajax to adjust the excess with a slider. If you have one object stored for each quote with all the details already stored then you can easily just pass the new excess value and trigger each one to recalculate and reproduce the quote. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920640 Share on other sites More sharing options...
RichardRotterdam Posted September 18, 2009 Share Posted September 18, 2009 I guess that would be a good example of when the serialize would come in handy so that's a good point. However if for example you want to change a user name, then simply sending the id and a new name would be enough instead of cramming a User object inside a session. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920642 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 However if for example you want to change a user name, then simply sending the id and a new name would be enough instead of cramming a User object inside a session. Very true. I struggle to think of anything in the systems I code in that could benefit from it. Only cases are some large paging setups where you might want to alter the order of the data, and where the data comes from multiple seperate databases (which I already have to read in and then sort in a multidimensioned array to find what I need for a particular page). Even then I am dubious as some of the data could be altered by another user between creating the object and the next time you access it. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920648 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 Thanks keith the serialize and unserialize solves the problem i was having.... With regard to what i am trying to do: I have a user that is trying to update a forum posting via ajax. The main script creates a userObject that stores the userId and user details. Rather than send the external php script that ajax calls the userId, I am storing the user_object in a session... it is then available to the exernal php script that ajax calls... Is this the right way to go about it?.. regards J. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920663 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi Possibly. Partly depends how complex he details are. Very complex and it is worthwhile, but then loads of users logged on and you will land up with a massive amount of memory used by these objects. Small simple data and not sure you need an object in the first place, just retrieve it from the table each time a screen is returned (how phpBB does it), and just store the userid in a session variable. There is also the issue where you might want to bounce someone off the forum (or other interections with existing users). Easy to do if they need to check the users database each time they return a screen, but not so easy if once logged on they are just referring to the object. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920666 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 Im still trying to understand classes... If designing a social network... You Would have a userclass... If a user is logged in, on the top of every page i want to have the users full name and some mroe of his details. The user class would firstly query the database to see if the user is logged in, and then query the database to get that users details so that they could be displayed. However would you not store this user_Object in a session so that you dont have to keep querying the database, or would you simply keep querying the database to get the users details on every page? regards J. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920668 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 . Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920670 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 However would you not store this user_Object in a session so that you dont have to keep querying the database, or would you simply keep querying the database to get the users details on every page? For that I would personally just query the database. Almost certainly not have a users class, just store the data in normal variables once retrieved from the database. The data could probably be returned with a simple and fast SQL query. Comes down to storage vs processing. You can basically use up one or the other. If you wanted to retrieve the details every second (say a chat form) then it would probably be worth storing it and saving on the processsing (but then the chat form probably wouldn't need that level of data). Against that if checks are every few minutes after someone has read a page then no point in clogging the storage, you would just retrieve it when needed. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920673 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 Keith i really appreciate your continued support... although i have been getting so many conflicting responses regarding when to use classes etc im some what confused... however i take your word as gospel!... So in a social network scenerio, like facebook... To get a logged in users details to be printed at the top of every page... you would simply use an include statement that runs a query to see if the user is logged in and if so grab his details... Would it not be best still to create a user class to store the details in the user object, but just not store the object created in a session?... therefore the session is not stored on the server... but i have a simple way to see if the user is logged in and then if he is to grab their details?... or you would just say no classes at all for that?... I'm sorry to go on... but if you wouldn't have a user class in an application like facebook... when would you use a class in a social network like facebook... regards J. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920679 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi I am not that keen on the whole idea of using objects for everything. Others are far more keen on the idea. My view is that they are useful for storing a load of info which they will manipulate and possibly output, and which is fairly self contained. To me objects are a tool to be used when they make life simpler / more efficient, not something that should be used as a matter of course (but then my background is originally from programming mainframes in PL/1 and Cobol). However with whether someone is logged on I would just store their userid in a session variable. When a panel is requested pick up that session variable and retrieve the required info (such as when they last requested a panel, which makes it easy to time them out or boot them off). Can be done in one place to check if they are logged in. Think that setting up a class for the user with methods to check they are logged in, etc, is a bit of an overhead although one way of doing it. You would still need to fire off a method on the object when instantiated to check the database to see if they are still logged on so the savings in database access are small. And it seems pointless to call a method to get a value from an object when you can have the value as a variable. While you could use an object to store all the info for a user on such a site (such as all their friends), there is too much chance that this data might change when they are logged on that you would still need to rebuild the object often. Eg, if you object contained a list of people you have sent friend requests to you would need to check each time if they have confirmed the request. So yes I might have a person object (with a list of friends which could also be person objects) but I would build it when required and not try and store it. There could be an argument for a kind of site object storing common info stored in a database and retrieved by all scripts, but which super users can update and so rapidly pass on to other users. All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920686 Share on other sites More sharing options...
jonniejoejonson Posted September 18, 2009 Author Share Posted September 18, 2009 Keith, i've always thought that using include satements are more useful than creating objects, however i'm trying my hardest to use classes so that i can gain experience.. but my biggest struggle is undestanding when to use them?... With regard to the creating a user class to select a users friends... I could simply have a function within the user class that gets a users friends... so i could just call it when i wanted... however i could also just have an exernal script that grabs a users friends, and use an include to grab them. Anyway if you can give me any more examples of when you may use a class within a scoial network scenario that would be much appreciated... thanks again.. J Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920695 Share on other sites More sharing options...
kickstart Posted September 18, 2009 Share Posted September 18, 2009 Hi I feel exactly the same way with using includes and functions. To me for most uses they are more suitable. One thing I would think about using a class for would be for a drop down list. Populate the class, and use it to validate whether someones response was valid, and if not return a drop down list from the class. Again though not sure I would bother to store it in a session, just recreate it All the best Keith Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-920707 Share on other sites More sharing options...
jonniejoejonson Posted September 21, 2009 Author Share Posted September 21, 2009 Thanks keith. Quote Link to comment https://forums.phpfreaks.com/topic/174562-php-classes-with-ajax/#findComment-922183 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.