简体   繁体   中英

calling method in another class in php

I am new to php and trying to call a function in another class.

How do I call function1 and function2 in class xyz???

class abc {
private $lmn = "lmn";
private $say1;
private static $static;

private function __construct(){
   $say1 = print $this->lmn;

}

public static function1(){

$static = "YEAAHHHH";
}

public function function2(){

    return $this->say1;
}

file 2:

require 'abc.php';

class xyz {

/**
* $e = new xyz();
*
*/


$e = xyz:: function1();// error
$d = xyz:: function 2(); //error

}

Also under what circumstance I should use

$obj = new class(); 
$obj->functionname();

and

$obj = class::functionname();

You have 2 different types of methods here, static and non-static.

To call the static ( function1() )

  • You don't need to instantiate the class, as it's static.

class zyx {
    public function foo() {
          return abc::function1();
    }
}

To call the non-static ( function2() )

  • You need to instantiate the class, as it's not static.

class zyx {
    public function foo() {
          $abc = new abc();
          return $abc->function2();
    }
}

Static functions can be called without instantiating your class...

$myClass::function1();

Non-static functions need to be instantiated first:

$myClass = new abc();
$myClass->function2();

So in your example:

require 'abc.php';

class xyz {

    public function CallFunc1()
    {
        abc::function1();
    }

    public function CallFunc2()
    {
       $myClass = new abc();
        $myClass->function2();
    }

}
    require 'abc.php';

    class xyz {

       public function static(){
          return abc:: function1();// this is a static function
       }
       public function nonstatic(){
            $e = new abc();
            return $e->function2(); 
        }

     } 

You would call function1 like:

abc::function1();

It is a method in abc not xyz .

function2() you would only call if you had an instance of abc because it is an instance method and not a static method. Ie

$abc = new abc();
$abc->function2();

Static functions are intended to be called on classes, instance methods (ie function2() are intended to be called on instances of classes. I would recommend reading http://php.net/manual/en/oop5.intro.php .

First of all, you can't have a space between function and 2():

$d = xyz::function2(); //correct
$d = xyz::function 2(); //very incorrect

I was going to have a second of all, but @hd beat me to it.

I think you have messed up with the code. I can share something with something that I found very helpful as an answer for your second question. Spend a bit time reading this. This is very basic, simple and well guided.

http://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM