Как я могу привести класс для моего объекта на PHP? - PullRequest
2 голосов
/ 06 марта 2019

У меня есть объект $ obj (класс A). Могу ли я конвертировать класс для $ obj в B? Возможно, есть другой способ.

Пример:

class A 
{
    public $AProp = 1;
    public function &Convert($ATypeName)
    {
       // HOW?
       return $this;
    }
}

class B extends A
{
   public $BProp = 2;
}

$obj=new A();
$obj->Convert("B");

print_r($obj->BProp);

Я написал следующее решение, но оно бесполезно. (Похоже, ваш пост в основном кодовый; я добавлю еще несколько деталей)

class A 
{
   public $AProp = 1;
   public function &Convert($ATypeName)
   {
       $Result = new $ATypeName; // Create new object
       $Result->AProp = $this->AProp; // Copy params...
       return $Result; 
   }
}

class B extends A
{
   public $BProp = 2;
}


$obj = new A();
$obj->AProp = 3;
$obj = $obj->Convert("B");

print_r($obj);

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Это единственный способ:

$obj = new B();

Поскольку используется наследование, вы можете получить доступ ко всем классам A func и var, например, $this->Aprop

0 голосов
/ 06 марта 2019

вы пытаетесь использовать c ++ - способ расширения класса.php-way выглядит следующим образом:

<?php
class A 
{
    protected $prop = 1;
    public function getProp()
    {
       return $this->prop;
    }
}

class B extends A
{
   protected $prop = 2;
}

$obj=new A();
print_r($obj->getProp());

$obj=new B();
print_r($obj->getProp());

также обратите внимание на поздние статические привязки - http://php.net/manual/en/language.oop5.late-static-bindings.php

<?php
class A 
{
    public static $prop = 1;
    public function getProp()
    {
       return static::$prop;
    }
}

class B extends A
{
   public static $prop = 2;
}

$obj=new A();
print_r($obj->getProp());

$obj=new B();
print_r($obj->getProp());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...