PHP bir sınıf içinde bir nesnesinin bir üyesi erişme

6 Cevap php

My code:

class Address{
   public var $Street;
}

class Employee{
    public var $ID:
    public var $Name:
    public var $Address;
}

$myEmployee = new Employee();
$myEmployee->Address = new Address();

Nasıl sokak şimdi girebilirim?

$street = $myEmployee->$Address->Street;
$street = $myEmployee->Address->Street;

Her ikisi de bana Eclipse uyarı verir. Ben düşünüyordum:

$street = $myEmployee['Address']->Street;

Bu doğru mudur?

6 Cevap

Söylendiği gibi, öneri kullanmak için:

$street = $myEmployee->Address->Street;

mükemmel geçerlidir. Ancak, sorunlara neden olabilir kodunuzda birkaç hata vardır. Öncelikle, kamu üye değişkenler ya böyle bildirilir:

public $id;

ya bu (önerilmez):

var $id;

Ikisinin kombinasyonu Sizin geçerli PHP kodu değildir.

Ayrıca, iki nokta üst üste (:) hat uçlarında, noktalı virgül olmalı (;) var.

Umarım ki olur!

$myEmployee->Address->Street;

Bu geçerli ve Eclipse'in uyarı sistemi bu gibi şeyler konusunda oldukça garip. Ben genellikle bu gibi durumlarda bunları kapatın ve PHP benim için raporlama hata yapalım.

Ayrıca Tutulma yapmanız gerekenler için otomatik tamamlama desteklemiyor.

$street = $myEmployee->Address->Street;

çalışması gerekir. Eclipse neyse, ne şikayet ediyor?

Bir alternatif erişimcilere ve özel veri üyeleri kullanmak olacaktır:

class Address {
   private $Street;

   public function __construct() {}

   public function setStreet($Street) {
       $this->Street = $Street;
   }

   public function getStreet() {
      return $this->Street;
   }
}

/* ... same for Employee ... */

$myEmployee = new Employee();
$myEmployee->setAddress(new Address());

$street = $myEmployee->getAddress()->getStreet();

Bu durumda daha sonra iç uygulanmasını değiştirmek gerekir kapsülleme ile size sağlayacaktır. Eğer kamu Veri üyeleri olarak sınıf üyelerini maruz eğer istemci kod sınıfları kullanarak başladığında, onlara takılıp kalıyoruz.

Üstlenmeden bu şekilde daha kolay olacağını ve aynı zamanda uyarıların kurtulacaksınız.

Eclipse kod tamamlama eksikliği nedeni kod tamamlama bilgileri yazın gerektirir.

PHP bu ya type hints ile gerçekleştirilir ve açıklamaları commentated edilir.

Ben ne kullandığınız Eclipse eklentisi emin değilim, ama PDT için manuel kontrol eğer code assist:

Basit bir açıklama açıklama daha sonra:

Çalışanlara yukarıda da ekleyebilirsiniz:

/**
 * @property Address $Address
 */
class Employee 
....

Neden Çalışan sınıfının yapıcı adresi oluşturmak değil mi? Ben sonunda birden fazla Çalışan oluşturmak olacak ve yerine, sadece bir Çalışan oluşturmak ve Adres zaten olduğunu konfor cümbüş olabilir, bir Çalışan ve Adres hem de oluşturmak için iki satır her zaman sahip tahmin ediyorum oluşturulan ve $ myEmployee-> Adres saklanır.