#php #oop
#php #ооп
Вопрос:
Когда бы вы использовали $this
ключевое слово в PHP? Насколько я понимаю, $this
относится к объекту, созданному без знания имени объектов.
Также ключевое слово $this
может использоваться только внутри метода?
Было бы здорово показать пример, когда вы можете использовать $this
.
Комментарии:
1. php.net/OOP -> Основы.
2. В частности, обратите внимание на пример # 2 здесь: php.net/manual/en/language.oop5.basic.php
3.
$this
это не ключевое слово в PHP (а псевдопеременная ), поэтому на ваш вопрос нельзя ответить.
Ответ №1:
Класс может содержать свои собственные константы, переменные (называемые «свойствами») и функции (называемые «методами»).
<?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)
- $это не определено.
Ответ №2:
Наиболее распространенный вариант использования — в объектно-ориентированном программировании при определении класса или работе внутри него. Например:
class Horse {
var $running = false;
function run() {
$this->running = true;
}
}
Как вы можете видеть, внутри run
функции мы можем использовать $this
переменную для ссылки на экземпляр класса Horse, в котором мы находимся. Итак, еще одна вещь, которую следует иметь в виду, это то, что если вы создаете 2 класса Horse, $this
переменная внутри каждого из них будет ссылаться на этот конкретный экземпляр класса Horse, а не на них обоих.
Ответ №3:
Вы бы использовали $ 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();
}
}
Комментарии:
1. Спасибо! я это понимаю, но вы бы когда-нибудь использовали $this вне метода?
2. Правильно, вы бы этого не сделали, потому что $this имеет смысл только с in a class . Вне него вы бы использовали объект, например $a = new Item(), вы могли бы сделать $a->methodName()
Ответ №4:
$this используется для создания ссылки на текущий экземпляр объекта. Таким образом, вы можете делать такие вещи, как:
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();
Ответ №5:
Оно используется в объектно-ориентированном программировании (ООП):
<?php
class Example
{
public function foo()
{
//code
}
public function bar()
{
$this->foo();
}
}
Доступна псевдопеременная $this
когда метод вызывается из
контекст объекта. $это ссылка
к вызывающему объекту (обычно к
объект, которому принадлежит метод,
но, возможно, другой объект, если
метод вызывается статически из
контекст вторичного объекта).
Ответ №6:
Используется, когда вы хотите работать с локальными переменными.
Вы также можете прочитать больше об этом здесь.
function bark() {
print "{$this->Name} says Woof!n";
}
Ответ №7:
Один раз, когда я знаю, что в конечном итоге использую this
эквивалент в других языках, это реализовать «Свободный» интерфейс; каждый метод класса, который в противном случае возвращал бы, void
вместо этого возвращает this
, так что вызовы методов могут быть легко объединены в цепочку.
public function DoThis(){
//Do stuff here...
return $this;
}
public function DoThat(){
//do other stuff here...
return $this;
}
Вышеуказанное можно было бы назвать следующим образом:
myObject->DoThis()->DoThat();
Которое может быть полезно для некоторых вещей.
Комментарии:
1. Вы имеете в виду, что его можно вызвать как
myObject->DoThis()->DoThat()
;-)?2. @thedom — хе-хе … извините; я редко работаю на PHP и почти никогда не использую ООП / PHP. Я это исправлю … спасибо за предупреждение об этой дурацкой ошибке! 🙂
3. нет проблем… Мне просто стало интересно, и я больше не был уверен в себе, как это сделать:P // EDIT … $MyObject->doThis()->doThat() конечно, lol!
Ответ №8:
$this используется, когда вы создали новый экземпляр объекта.
Например, представьте это :
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, я должен создать новый экземпляр класса Test, вот так :
$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 используется внутри класса при создании экземпляра. На него ссылаются как на область.
Внутри вашего класса вы используете $this (например, для доступа к *$_hello *), но вне класса $this НЕ ссылается на элементы внутри вашего класса (например, *$_hello *), это делает $obj.
Итак, основное различие между $ obj и $ this заключается в том, что поскольку $obj обращается к вашему классу извне, возникают некоторые ограничения : если вы определяете что-то частное или защищенное в вашем классе, например, мою переменную *$_hello *, $obj НЕ МОЖЕТ получить к нему доступ (оно закрытое!), но $this может, потому что $ this остается внутри класса.
Ответ №9:
нет, я думаю, что ваша идея неверна.. $this
используется, когда ссылается на объект того же класса.. вот так
думаю, у нас есть значение переменной $ var, и в ЭТОМ экземпляре этого объекта должно быть установлено значение 5
$this->var=5;
Ответ №10:
$ this используется для ссылки на методы или переменные экземпляра, принадлежащие текущему объекту
$this->name = $name или $this->callSomeMethod()
это будет использовать переменную или метод, реализованный в текущем подклассе объекта или нет.
Если вы хотели бы конкретно вызвать реализацию родительского класса, вы бы сделали что-то вроде
parent::callSomeMethod()
Ответ №11:
Всякий раз, когда вы хотите использовать переменную, которая находится вне функции, но внутри того же класса, вы используете $this. $это относится к текущему классу php, в котором находится свойство или функция, к которым вы собираетесь получить доступ. Это основная концепция php.
Ответ №12:
<?php
class identity {
public $name;
public $age;
public function display() {
return $this->name . 'is'. $this->age . 'years old';
}
}
?>