どうすればこのようにプロパティを設定して取得できますか?PHP - 設定して取得する方法
$newObj = new Core;
$newObj->setTitle("Value"); //where title is a property from the Core object
$newObj->getTitle();
私はOOPに新しいが助けてください。
更新:ちょっとマジェントセットとセッションを得る。
どうすればこのようにプロパティを設定して取得できますか?PHP - 設定して取得する方法
$newObj = new Core;
$newObj->setTitle("Value"); //where title is a property from the Core object
$newObj->getTitle();
私はOOPに新しいが助けてください。
更新:ちょっとマジェントセットとセッションを得る。
PHPは、いわゆるマジックメソッドを提供します。あなたは__get
と__set
の魔法を持っています。
setFoo()
とgetFoo()
メソッド呼び出しではアクセスできませんが、これによりクラスのアクセスできないプロパティにアクセスすることができます。これを行うには、プロパティごとに2つのメソッドを定義するか、3番目のマジックメソッド__call
を使用する必要があります。
最初のパラメータと追加のパラメータの配列として呼び出されたメソッドの名前が取得され、呼び出しが行われた操作を簡単に識別できます。短い例:
public function __call($methodName, $methodParams)
{
$type = substr($methodName, 0, 3);
$property = lcfirst(substr($methodName, 3)); // lcfirst is only required if your properties begin with lower case letters
if (isset($this->{$property}) === false) {
// handle non-existing property
}
if ($type === "get") {
return $this->{$property};
} elseif ($type === "set") {
$this->{$property} = $methodParams[0];
return $this; // only if you wish to "link" several set calls.
} else {
// handle undefined type
}
}
よろしくお願いします。 – MashiruAlexis
単純なパブリックメソッドを使用して、値をclass propertiesに設定できます。
class Core {
private $title;
public function setTitle($val) {
$this->title = $val;
}
public function getTitle() {
return $this->title;
}
}
セッターで '$ this 'を返すのは良い習慣ではありませんか? – akasummer
私はすでにその方法を知っています。私は製品から属性を取り出すときにMagentoのようにしたいと思っています。 – MashiruAlexis
あなたはこれを行うには、単純なクラスが必要です。
<?php
class Core
{
private $title;
public function setTitle($val)
{
$this->title = $val;
}
public function getTitle()
{
return $this->title;
}
}
$newObj = new Core;
$newObj->setTitle("Value");
$newObj->getTitle();
?>
お返事ありがとうございましたが、私はすでにその方法を知っています。私は製品から属性を取り出すときにMagentoのようにしたいと思っています。 – MashiruAlexis
まず、あなたはクラスのオブジェクトを生成し、適切なメソッドを呼び出すことにより、これらの方法を使用することができ、その後、この
<?php
class sampleclass {
private $firstField;
public function getfirst() {
return $this->firstField;
}
public function setfirst($value) {
$this->firstField = $value;
}
}
?>
のようなあなたのクラスを作成します。メソッドを呼び出す
は、この、これだけ
$obj = new sampleclass();
$obj->setfirst('value');
echo $obj->getFirst();
のようなものです。
問題点を明確にすることはできますか? – akasummer
マゼンタのアプローチを特別なものにすることができますか?それが立てば、質問は基本的なセッターとゲッターについてのようです。 – k0pernikus