2

したがって、私はオブジェクト指向プログラミングの世界では初めてであり、現在この問題に直面しています(すべてがコードに記述されています)。

<?php
    class MyClass {
        // Nothing important here
    }

    class MyAnotherClass {
        protected $className;

        public function __construct($className){
            $this->className = $className;
        }
        public function problematicFunction({$this->className} $object){
            // So, here I obligatorily want an $object of
            // dynamic type/class "$this->className"
            // but it don't works like this...
        }
    }

    $object = new MyClass;
    $another_object = new MyAnotherClass('MyClass');

    $another_object->problematicFunction($object);
?>

誰かが私を助けることができますか?

ありがとう、マキシム(フランスから:私の英語でごめんなさい)

4

3 に答える 3

3

必要なのは

public function problematicFunction($object) {
    if ($object instanceof $this->className) {
        // Do your stuff
    } else {
        throw new InvalidArgumentException("YOur error Message");
    }
}
于 2013-02-25T10:53:44.977 に答える
0

このようにしてみてください

class MyClass {
    // Nothing important here
    public function test(){
        echo 'Test MyClass';
    }
}

class MyAnotherClass {
    protected $className;

    public function __construct($className){
        $this->className = $className;
    }
    public function problematicFunction($object){
        if($object instanceof $this->className)
        {
            $object->test();
        }
    }
}

$object = new MyClass;
$another_object = new MyAnotherClass('MyClass');

$another_object->problematicFunction($object);
于 2013-02-25T10:54:52.557 に答える
0

これは型ヒントと呼ばれ、実行したいことはサポートされていません。

これらすべての動的クラス名に共通点がある場合(たとえば、特定の機能の実装が異なる場合)、基本(おそらく抽象)クラスまたはインターフェイスを定義し、その共通の祖先を型のヒントとして使用することをお勧めします。

<?php

interface iDatabase{
    public function __contruct($url, $username, $password);
    public function execute($sql, $params);
    public function close();
}

class MyClass implements iDatabase{
    public function __contruct($url, $username, $password){
    }

    public function execute($sql, $params){
    }

    public function close(){
    }
}

class MyAnotherClass {
    protected $className;

    public function __construct($className){
        $this->className = $className;
    }
    public function problematicFunction(iDatabase $object){
    }
}

problematicFunction()それ以外の場合は、他の回答で説明されているように、チェックを本文内に移動します。

于 2013-02-25T11:03:06.583 に答える