Jump to content
Sign in to follow this  
JarlG

Problem creating objects dynamically

Recommended Posts

Hi, I'm trying to create objects on the run, but it I have run int a barrier that is really annoying:
The code is:

$tableName = $this->_stripNamespaceFromClassName(get_class($this));
$modelName = $tableName;
$modelName[strlen($modelName) - 1] = "";
$demoModelName = "Product";
echo "-".$tableName."-\n";
echo "-".$modelName."-\n";
echo "-".$demoModelName."-\n";
$demoFullyQualifiedModelName = "\\StreamComposer\\Models\\$demoModelName";
$fullyQualifiedModelName = "\\StreamComposer\\Models\\$modelName";
echo "So far so good\n";
new $demoFullyQualifiedModelName();
echo "Demo loaded ok\n";
new $fullyQualifiedModelName();
echo "Fully loaded ok\n";

 
The result is (Echo string is bold):
-Products-
-Product-
-Product-
So far so good
Demo loaded ok
PHP Fatal error:  Uncaught Error: Class '\StreamComposer\Models\Product' not found in /var/www/streamcomposer.com/api/Models/Repositories/Repository.php:61
Stack trace:
#0 /var/www/streamcomposer.com/api/Command/setupPayment.php(27): StreamComposer\Models\Repositories\Repository->loadAll()
#1 /var/www/streamcomposer.com/api/Command/setupPayment.php(32): StreamComposer\Command\SetupPayment->createPlans()
#2 {main}
  thrown in /var/www/streamcomposer.com/api/Models/Repositories/Repository.php on line 61
 
As you see the $demo.. object loads fine, but the $fully.. does not :-(
 
Thanks in advance

Edited by JarlG

Share this post


Link to post
Share on other sites

$modelName[strlen($modelName) - 1] = "";
Don't do that. You cannot use [] to remove characters - only replace. What the code above actually does is replace with a \0.

 

I don't know what character you're trying to remove but I suggest looking at rtrim.

 

[edit] The character is 's'. Which should be obvious given the code and output above. Eh.

Edited by requinix

Share this post


Link to post
Share on other sites

Thanks. Yes I just found out that that was the case :-)

I used: $modelName = preg_replace('/.$/', '', $modelName);

instead which also worked.

 

So thanks, and now I got an explanation for why and not just a solution. Much appreciated!

Share this post


Link to post
Share on other sites

There's really no need for slow and expensive regular expressions here.

$modelName = substr($modelName, 0, -1);

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  



×

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.