NotionCommotion Posted August 20, 2016 Share Posted August 20, 2016 I have classes "dogs", "cats", and "mice", and each extends class "animals". I have a table with primary integer key "id" (1, 2, 3) and unique column "animal_type" ("dogs", "cats", and "mice"). Given id of 2, how can I create a cats object without first querying the database to get the animal type? Quote Link to comment https://forums.phpfreaks.com/topic/301950-creating-an-object-without-knowing-the-class-name/ Share on other sites More sharing options...
Jacques1 Posted August 20, 2016 Share Posted August 20, 2016 PHP isn't clairvoyant. Quote Link to comment https://forums.phpfreaks.com/topic/301950-creating-an-object-without-knowing-the-class-name/#findComment-1536363 Share on other sites More sharing options...
NotionCommotion Posted August 20, 2016 Author Share Posted August 20, 2016 (edited) PHP isn't clairvoyant. Didn't know if I could/should create an object $animal=new animal(2) use the constructor to query the DB and return the object based on the appropriate class. Sounds a little recursive, so I expect not, but thought there might be something similar which was acceptable. Edited August 20, 2016 by NotionCommotion Quote Link to comment https://forums.phpfreaks.com/topic/301950-creating-an-object-without-knowing-the-class-name/#findComment-1536364 Share on other sites More sharing options...
Jacques1 Posted August 20, 2016 Share Posted August 20, 2016 A constructor cannot return an arbitrary object. A new animal is in fact a new animal, not a new dog or cat. Mapping rows of the same table to different classes sounds like a strange idea to begin with, but that aside, you could of course use something like $animal = Animal::load(2); // returns an instance of some subclass of Animal Quote Link to comment https://forums.phpfreaks.com/topic/301950-creating-an-object-without-knowing-the-class-name/#findComment-1536365 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.