PHP:相互连接类

时间:2012-02-21 17:40:04

标签: php class concatenation

如何以这种方式将类连接到另一个类?

class Person { }
$p1 = new Person();
$p2 = new Person();
$p3 = $p1 . $p2;

请记住,我将始终知道班级中需要提前连接的所有内容,因此概括不是问题。

5 个答案:

答案 0 :(得分:3)

您要求的操作没有意义。

在PHP中,

. string 连接操作。 Person对象可能有各种各样的成员,其中一些甚至可能在字符串形式中没有意义(对另一个对象的引用?数据库句柄?)。

如果您打算连接Person字符串人类可读表单(如果有的话),您可以在{{1}上添加__toString()方法},并在Person$p1上调用它,将连接的返回值放在$p2中。

答案 1 :(得分:2)

__toString()撰写Person方法。

答案 2 :(得分:1)

PHP不允许您重载运算符(除了一些小的例外)。话虽如此,您始终可以创建一个解决方法:

class Person { ... }

class People 
{ 
    // Array of Person objects
    private static $_people = Array();

    // Add person object to people object
    public function add(Array $persons)
    {
        foreach($persons as $person)
        {
           self::_people[] = $person;
        }
    }
}

$person1 = new Person;
$person2 = new Person;

$people = new People();
$people->add( Array($person1,$person2) );

...
Blah blah ...我有点咆哮。这只是一个或多或少的概念,有很大的改进空间。我的观点是你可以用这样的方式将对象组合在一起。

如果您的目标是将加法运算符直接应用于两个类中的每个属性并输出一个垃圾版本的Person对象,您可以创建一个函数来为您执行此操作...它不会像非常$person3 = $person1 + $person2;。相反,它可能看起来像$person3 = add($person1,$person2);

答案 3 :(得分:1)

这将把两个对象连接在一起,假设它们是相同的类型

<?php

function combine_objects($obj1, $obj2) {
  if (get_class($obj1) !== get_class($obj2)) {
    throw new Exception('Class mismatch');
  }

  $className = get_class($obj1);
  $newObject = new $className;
  foreach(get_object_vars($obj1) as $key => $value) {
    $newObject->$key = $obj1->$key . $obj2->$key;
  }

  return $newObject;
}

class Person {
  public $first;
  public $last;
  public $id;
}

$john = new Person;
$john->first = 'John';
$john->last = 'Smith';
$john->id = 1;


$mary = new Person;
$mary->first = 'Mary';
$mary->last = 'York';
$mary->id = 5;

$p3 = combine_objects($john, $mary);

var_dump($p3);

/*
object(Person)#3 (3) {
  ["first"]=>
  string(8) "JohnMary"
  ["last"]=>
  string(9) "SmithYork"
  ["id"]=>
  string(2) "15"
}
*/

答案 4 :(得分:0)

你运气不好 - PHP不会像C那样让运算符超载。