Search code examples
phpinstantiationamfweborb

Can't return value from another instantiated class/method using WebORB for PHP


I'm trying to use WebORB for PHP.

The /weborb/ folder has been copied into my web root and I can access the console via /weborb/index.php.

I've copied my test application into /weborb/_Services/Test/Main.php. The file contents is as follows:

<?php
require_once '/home/user/www/MyClass.php';

class Main
{
    public function testMethod($str)
    {
        return $this->MyClass->myMethod($str);
    }
}
?>

The file contents of "/home/user/www/MyClass.php" is:

<?php
class MyClass
{
    public function myMethod($str)
    {
        return $str;
    }
}

$MyClass = new MyClass();
?>

When I try to pass a string via the console is just says "Channel disconnected". There's nothing being logged into the error_log either. If I replace:

return $this->MyClass->myMethod($str);

..with..

return $str;

..it works! I simply want to be able to call other instantiated classes/methods.


Solution

  • Problem is that you are not declaring nor instantiating MyClass in your Main class

    Try this, it should work.

    <?php
    
    require_once '/home/user/www/MyClass.php';
    
    class Main {
    
        /**
         * 
         * @var MyClass
         */
        protected $_myClass = null;
    
        /**
         * Default Constructor
         */
        public function __construct() {
            $this->_myClass = new MyClass();
        }
    
        /**
         * Test Method
         *
         * @param string $str
         * @return string
         */
        public function testMethod($str) {
            return $this->_myClass->myMethod($str);
        }
    
    }
    
    ?>
    

    In your MyClass.php file you do not need to create variable $MyClass, it is useless. It will be out of the scope for any other script. Just define the class and that is it, then use this class to create new objects, like in example above.

    <?php
    
    //  MyClass.php
    // 
    //  ONLY Class Definition!!!
    //
    class MyClass {
    
        public function myMethod($str) {
            return $str;
        }
    
    }
    
    ?>