Inheritance: use trait Hello, use trait World
Beispiel #1
0
<?php

error_reporting(E_ALL);
trait Hello
{
    public function sayHello()
    {
        echo 'Hello ';
    }
}
trait World
{
    public function sayWorld()
    {
        echo 'World';
    }
}
class MyHelloWorld
{
    use Hello, World;
    public function sayExclamationMark()
    {
        echo '!';
    }
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
Beispiel #2
0
error_reporting(E_ALL);
abstract class Base
{
    public abstract function sayHello(array $a);
}
class SubClass extends Base
{
    public function sayHello(array $a)
    {
        echo "World!\n";
    }
}
$s = new SubClass();
$s->sayHello(array());
trait SayWorld
{
    public function sayHello(Base $d)
    {
        echo 'World!';
    }
}
class MyHelloWorld extends Base
{
    use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello(array());
?>
--EXPECTF--

Fatal error: Declaration of SayWorld::sayHello() must be compatible with Base::sayHello(array $a) in %s on line %d, position %d
Beispiel #3
0
--TEST--
Trait method overriddes base class method
--FILE--
<?php 
error_reporting(E_ALL);
class Base
{
    public function sayHello()
    {
        echo 'Hello ';
    }
}
trait SayWorld
{
    public function sayHello()
    {
        echo 'World!';
    }
}
class MyHelloWorld extends Base
{
    use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
--EXPECTF--
World!
Beispiel #4
0
trait Hello
{
    public function say()
    {
        echo 'Hello ';
    }
}
trait World
{
    public function say()
    {
        echo 'World';
    }
}
class MyHelloWorld
{
    use Hello {
        Hello::say as sayHello;
    }
    public function say()
    {
        $this->sayHello();
        $this->sayWorld();
        echo "!\n";
    }
    use World {
        World::say as sayWorld;
    }
}
$o = new MyHelloWorld();
$o->say();
Beispiel #5
0
<?php

trait Hello
{
    public function sayHello()
    {
        echo "Hello";
    }
}
trait World
{
    public function sayWorld()
    {
        echo "World";
    }
}
trait HelloWorld
{
    use Hello, World;
}
class MyHelloWorld
{
    use HelloWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
Beispiel #6
0
<?php

trait MY_TRAIT1
{
    public function sayHello()
    {
        echo 'Hello from MY_TRAIT1!';
    }
}
class MyHelloWorld
{
    use MY_TRAIT1 {
        MY_TRAIT1::sayHello as falaOi;
    }
}
$o = new MyHelloWorld();
$o->falaOi();
?>

Beispiel #7
0
<?php

trait MY_TRAIT2
{
    protected function sayGoodbye()
    {
        echo "Goodbye from MY_TRAIT2!\n";
    }
}
class MyHelloWorld
{
    use MY_TRAIT2 {
        MY_TRAIT2::sayGoodbye as public falaTchau;
    }
}
$o = new MyHelloWorld();
$o->falaTchau();
Beispiel #8
0
<?php

error_reporting(E_ALL);
trait Hello
{
    public function saySomething()
    {
        echo 'Hello';
    }
}
trait World
{
    public function saySomething()
    {
        echo 'World';
    }
}
class MyHelloWorld
{
    use Hello, World {
        Hello::saySomething insteadof World;
    }
}
$o = new MyHelloWorld();
$o->saySomething();
Beispiel #9
0
<?php

trait MY_TRAIT1
{
    public function sayHello()
    {
        echo "Hello from MY_TRAIT1!\n";
    }
}
trait MY_TRAIT2
{
    use MY_TRAIT1;
    public function sayGoodbye()
    {
        echo "Goodbye from MY_TRAIT2!\n";
    }
}
class MyHelloWorld
{
    use MY_TRAIT2 {
        MY_TRAIT2::sayHello as falaOi;
        MY_TRAIT2::sayGoodbye as falaTchau;
    }
}
$o = new MyHelloWorld();
$o->falaOi();
$o->falaTchau();
$o->sayHello();
$o->sayGoodbye();
Beispiel #10
0
Express requirements of a trait by abstract methods.
--FILE--
<?php 
error_reporting(E_ALL);
trait Hello
{
    public function sayHelloWorld()
    {
        echo 'Hello' . $this->getWorld();
    }
    public abstract function getWorld();
}
class MyHelloWorld
{
    private $world;
    use Hello;
    public function getWorld()
    {
        return $this->world;
    }
    public function setWorld($val)
    {
        $this->world = $val;
    }
}
$o = new MyHelloWorld();
$o->setWorld(' World!');
$o->sayHelloWorld();
?>
--EXPECTF--
Hello World!
Beispiel #11
0
Use instead to solve a conflict and as to access the method.
--FILE--
<?php 
error_reporting(E_ALL);
trait Hello
{
    public function saySomething()
    {
        echo 'Hello';
    }
}
trait World
{
    public function saySomething()
    {
        echo ' World';
    }
}
class MyHelloWorld
{
    use Hello, World {
        Hello::saySomething insteadof World;
        World::saySomething as sayWorld;
    }
}
$o = new MyHelloWorld();
$o->saySomething();
$o->sayWorld();
?>
--EXPECTF--
Hello World
Beispiel #12
0
<?php

trait SayWorld
{
    public function sayHelloWorld()
    {
        self::sayHello();
        echo 'World!';
    }
}
class MyHelloWorld
{
    use SayWorld;
    public function sayHello()
    {
        echo 'Hello ';
    }
}
$o = new MyHelloWorld();
$o->sayHelloWorld();
?>