Когда вы будете использовать ключевое слово $this в PHP?
когда вы используете $this
ключевое слово в PHP? Из того, что я понимаю $this
относится к объекту, созданному без знания имени объектов.
и слово $this
может использоваться только внутри метода?
пример было бы здорово, чтобы показать, когда вы можете использовать $this
.
11 ответов
класс может содержать собственные константы, переменные (называемые "свойствами") и функции (называемые"методами").
<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
некоторые примеры $ this псевдо-переменной:
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "$this is not defined.\n";
}
}
}
class B
{
function bar()
{
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
}
}
$a = new A();
$a->foo();
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
$b = new B();
$b->bar();
// Note: the next line will issue a warning if E_STRICT is enabled.
B::bar();
?>
приведенный выше пример выведет:
- $это определено (A)
- $это не определено.
- $это определено (B)
- $это не определено.
наиболее распространенным вариантом использования является объектно-ориентированное программирование при определении или работе в классе. Например:
class Horse {
var $running = false;
function run() {
$this->running = true;
}
}
как вы можете видеть, в
вы бы использовали только $this, если вы делаете объектно-ориентированное программирование в PHP. Значение, если вы создаете классы. Вот пример:
class Item {
protected $name, $price, $qty, $total;
public function __construct($iName, $iPrice, $iQty) {
$this->name = $iName;
$this->price = $iPrice;
$this->qty = $iQty;
$this->calculate();
}
}
$используется для ссылки на текущий экземпляр объекта. Таким образом, вы можете делать такие вещи, как:
class MyClass {
private $name;
public function setName($name) {
$this->name = $name;
}
//vs
public function setName($pName) {
$name = $pName;
}
}
еще круто использовать то, что вы можете цепи методами:
class MyClass2 {
private $firstName;
private $lastName;
public function setFirstName($name) {
$this->firstName = $name;
return $this;
}
public function setLastName($name) {
$this->lastName = $name;
return $this;
}
public function sayHello() {
print "Hello {$this->firstName} {$this->lastName}";
}
}
//And now you can do:
$newInstance = new MyClass2;
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello();
используется в объектно-ориентированном программировании (ООП):
<?php
class Example
{
public function foo()
{
//code
}
public function bar()
{
$this->foo();
}
}
псевдо-переменная $this доступна когда метод вызывается из контекст объекта. $это ссылка к вызывающему объекту (обычно объект, которому принадлежит метод, но, возможно, другой объект, если метод вызывается статически из контекст вторичного объекта).
используется, когда вы хотите работать с локальными переменными.
вы также можете узнать больше об этом из здесь.
function bark() {
print "{$this->Name} says Woof!\n";
}
один раз я знаю, что в конечном итоге я использую this
эквивалент на других языках-реализовать интерфейс "Fluent"; каждый метод класса, который в противном случае вернул бы void
вместо этого возвращает this
, Так что вызовы методов могут быть легко скованы вместе.
public function DoThis(){
//Do stuff here...
return $this;
}
public function DoThat(){
//do other stuff here...
return $this;
}
вышеизложенное можно назвать так:
myObject->DoThis()->DoThat();
что может быть полезно для некоторых вещей.
это используется, когда вы создали новый экземпляр объекта.
например, представьте себе, это :
class Test {
private $_hello = "hello";
public function getHello () {
echo $this->_hello; // note that I removed the $ from _hello !
}
public function setHello ($hello) {
$this->_hello = $hello;
}
}
чтобы получить доступ к методу getHello, я должен создать новый экземпляр теста класса, например:
$obj = new Test ();
// Then, I can access to the getHello method :
echo $obj->getHello ();
// will output "hello"
$obj->setHello("lala");
echo $obj->getHello ();
// will output "lala"
фактически, $this используется внутри класса, когда экземпляр. Это называется область.
внутри вашего класса вы используете это (для доступа *$_hello* для пример), но вне класса,это не относится к элементам внутри вашего класса (например, *$_hello*), это в obj$ что делает.
Итак, основное различие между в obj$ и это С в obj$ доступ к классу из за пределами некоторые ограничения : если вы определяете что-то частная или защищенный в вашем классе, как моя переменная *$_hello*, в obj$ НЕ МОГУ доступ к нему (это личное!), но это can, так это оставить внутри класса.
нет, я думаю, что ваша идея неверна.. $this
используется, когда относится к объекту того же класса.. такой
думаю, у нас есть значение переменной $VAR и в это экземпляр этого объекта должен быть установлен в 5
$this - >var=5;
использование $this для ссылки на методы или переменные экземпляра, принадлежащие текущему объекту
$this - >name = $name или $this - >callSomeMethod ()
который будет использовать переменную или метод, реализованный в текущем подклассе объекта или нет.
Если вы хотите специально вызвать реализацию родительского класса, вы должны сделать что-то вроде
parent:: callSomeMethod ()
<?php
class identity {
public $name;
public $age;
public function display() {
return $this->name . 'is'. $this->age . 'years old';
}
}
?>