0

私はオブジェクト指向プログラミングにかなり慣れていないので、単純なことを見逃したり、何か間違ったことをしたりした場合は、我慢してください。

ドメインクラスにドメイン名の詳細(名前、有効期限、作成日など)を含めることができる設定がありますが、ドメインが関連付けられているホスティングアカウントに関連する$hosting変数を含めることもできます。ただし、すべてのドメインがホストされているわけではなく、使用されるのを待っているだけなので、ホスティングオブジェクトが常に存在するとは限りません。

ドメインとホスティングの両方で、関連する詳細を返す関数があります。たとえば、次のようになります。

private $accountId;
private $name;
private $created;

public function getAccountId() {    return $this->accountId;        }
public function getName() {     return $this->name;     }
public function getCreated() {  return $this->created;  }

したがって、ドメインオブジェクト($ domainと呼ばれる)内からホスティングアカウントIDが必要な場合は、次のことができます。

$domain->getHosting()->getId();

うまくいけば、それは理にかなっています!

ホスティングアカウントがある場合は、IDが返されます。 PHP Fatal error: Call to a member function getAccountId() on a non-object in /home/sites/.../file.php on line x

$domain->getHosting()このエラーを防ぐために存在するかどうかを確認する方法はありますか?

よろしくお願いします。これが単純なエラーの場合は申し訳ありません。

4

6 に答える 6

3

実際には、1つのタイプではなく、2つのタイプがあります。

class Domain {
   ....
}

class HostedDomain extends Domain {
   ...
}

それに応じてコードを記述します。HostedDomainよりも少し具体的ですDomainDomainそれは、フィッティングに加えていくつかの特別な場所でどこでも使用することができます。

次に、各ドメインがホストされているかどうかを確認できます。

if ($domain instanceof HostedDomain) {
    ...
}

オブジェクトの継承型演算子を参照してください。

于 2012-10-13T01:21:40.403 に答える
1

PHPのmethod_existsを使用できます

   if(method_exists($domain,'getHosting')){ ... }
于 2012-10-13T01:16:00.020 に答える
1

または、クラスが存在するかどうかを本当に確認したい場合は、次のようにします。

if (class_exists('Domain')) { ... }
于 2012-10-13T01:19:59.020 に答える
1

私のPHPは少し錆びていisset($hosting)ますが、ドメインオブジェクト内で、ホストが存在するかどうかを確認するためのドメインクラスのメソッド(hasHostなど)として、または単に役立つと思いますisset($domain->getHosting())。ホストがない場合に$hostingを設定しないと仮定すると、issetは必要な処理を実行する必要があります。

于 2012-10-13T01:22:39.920 に答える
0

使用する前にgetHostingが存在することを確認してください

if (! $domain->getHosting()) {
   $value = $domain->getHosting()->getId();
}
于 2012-10-13T01:17:19.457 に答える
0

メソッドgetHosting()はオブジェクトを返すため、値を一時変数に格納し、変数が空かどうかを確認し、空でない場合は次のように使用できます。

$hosting = $domain->getHosting();
if (!empty($hosting)) {
    $id = $hosting->getId();
}

以外にもいくつかの選択肢がありempty()ます。isset()、、またはを使用して、このシナリオで必要となるのと同じロジックをすべて提供する必要があるis_object()かどうかを確認することもできます。$hosting != null

getHosting()もちろん、これはすべて、メソッドがクラスに存在することを前提としていますDomain(他の回答のいくつかが対処しているもの)。

于 2012-10-13T01:20:37.170 に答える