Супер простой вопрос. Посмотрите на 2 класса методов класса.
 В первом я $params вызов переменной / свойства $params I, затем выполните $this->params 
  Мой вопрос в том, действительно ли это необходимо, я обычно делаю это так, но я заметил, что он будет работать во втором примере с просто вызовом $params без установки $this . 
  Итак, моя теория такова: вы должны установить ее как $this->params если вам нужно получить доступ к этому свойству другим методом в этом классе, и вы можете использовать только $params если вы используете только это свойство в том же метод уже есть. 
Может ли кто-то пролить свет на это и объяснить, правильна ли моя теория или если я ухожу, я хотел бы знать аргументы в пользу этого, поэтому я буду знать, когда делать каждый метод или делать то или другое все время, спасибо вы
 class TestClass{ public function TestFunc($params){ $this->params = $params; echo 'testing this something'. $this->params; } } 
без определения переменных
 class TestClass2{ public function TestFunc2($params){ echo 'testing this something'. $params; } } 
         Используйте $this при доступе к переменным класса. 
  При доступе к переменной, которая на самом деле является параметром в функции, нет необходимости использовать ключевое слово $this . Фактически для доступа к параметру функции с параметрами $ params вам не следует использовать $ this keyword … 
В вашем примере:
 class TestClass{ public function TestFunc($params){ $this->params = $params; echo 'testing this something'. $this->params; } } 
  $params из TestFunc($params){ является параметром / аргументом функции TestFunc поэтому вам не нужно использовать $this .  Фактически, для доступа к значению параметра вы не должны использовать $this – теперь, когда вы использовали $this->params из $this->params = $params = $params;  , вы фактически устанавливаете значение, эквивалентное значению параметра $params для новой переменной уровня класса, также называемой $params (поскольку вы не объявляли ее нигде в вашем примере кода) 
[править] на основе комментария:
Посмотрите на этот пример:
 class TestClass{ public function TestFunc($params){ $this->params = $params; # ^ you are setting a new class-level variable $params # with the value passed to the function TestFunc # also named $params echo 'testing this something'. $this->params; } public function EchoParameterFromFunction_TestFunc() { echo "\n\$this->params: " . $this->params . "\n"; # now you are echo-ing the class-level variable named $params # from which its value was taken from the parameter passed # to function TestFunc } } $tc = new TestClass(); $tc->EchoParameterFromFunction_TestFunc(); # error: undefined property TestClass::$params $tc->TestFunc('TestFuncParam'); $tc->EchoParameterFromFunction_TestFunc(); # should echo: $this->params: TestFuncParam 
  Ошибка при вызове EchoParameterFromFunction_TestFunc без первого вызова TestFunc является результатом не объявления / установки переменной / свойства класса на уровне $params вы устанавливаете это внутри TestFunc , что означает, что он не будет установлен, если вы не вызываете TestFunc .  Чтобы установить его правильно, чтобы каждый мог сразу получить доступ к нему: 
 class TestClass{ # declare (and set if you like) public /*or private or protected*/ $params; // = ''; or create a construct... public function __construct(){ # set (and first declare if you like) $this->params = 'default value'; } ... ... ... 
[edit: дополнительные]
  Как упоминал @liquorvicar , с которым я также полностью согласен, вы должны всегда объявлять все свои свойства / переменные на уровне класса независимо от того, будете ли вы их использовать.  Причина состоит в том, что вы не хотите получать доступ к переменной, которая не была установлена.  См. Мой пример выше, который undefined property TestClass::$params ошибку undefined property TestClass::$params .. 
Спасибо @liquorvicar за то, что напомнили мне.
Надеюсь, это поможет разобраться в этом:
 class Person { private $name; private $age; public function __construct($name, $age){ // save func params to instance vars $this->name = $name; $this->age = $age; } public function say_hello(){ // look, no func params! echo "My name is {$this->name} and I am {$this->age} years old!"; } public function celebrate_birthday(){ // no params again echo "Party time!"; $this->age += 1; // update instance var $this->drink_beer(); // call instance method } public function drink_beer(){ echo "Beer is good!"; } } $p = new Person("Sample", "20"); $p->say_hello(); // My name is Sample and I am 20 years old! $p->celebrate_birthday(); // Party time! Beer is good! $p->say_hello(); // My name is Sample and I am 21 years old! 
В общем, вы можете использовать определенную переменную, когда они находятся в контексте («область») вашего объекта.
  В программировании ООП $this почти всегда будет использоваться для доступа к переменной класса или другому методу класса. 
 class MyClass{ private $myNum; public function myFunc(){ echo 'My number is '.$this->myNum; // Outputting the class variable "myNum" } public function go($myNumber){ $this->myNum = $myNumber; // Will set the class variable "$myNum" to the value of "$myNumbe" - a parameter fo the "go" function. $this->myFunc(); // Will call the function "myFunc()" on the current object } } 
Шай.
Вы уже сами ответили на свой вопрос:
Вы должны установить его как $ this-> params, если вам нужно получить доступ к этому свойству другим методом в этом классе, и вы можете использовать только $ params, если вы используете это свойство только в том же методе, в котором он уже находится
Ваша собственная теория
Вы должны установить его как
$this->paramsесли вам нужно получить доступ к этому свойству другим методом в этом классе, и вы можете использовать только$paramsесли вы используете это свойство только в том же методе, в котором он уже есть.
является хорошим ориентиром, но он несколько короче. Рассматривать
 public function applyDiscount($discount) { if ($this->isValidDiscountRangeForProduct($discount)) { $this->price -= $this->price * $discount; } } 
  Вы не будете присваивать $discount объекту только потому, что вам нужно его проверить, прежде чем применять его к $this->price (используйте другой метод).  Лучшим ориентиром будет 
Если аргумент используется только для вычисления внутреннего состояния объекта, вы не делаете его свойством.
Кроме того, имейте в виду, что такой метод, как ваш
 public function TestFunc2($params) { echo 'testing this something' . $params; } 
скорее всего, будет неуместным на этом объекте, потому что у него нет сплоченности . Вам нужны только методы на вашем объекте, которые каким-то образом работают с данными этого объекта. Прикрепление методов, которые не действуют на объектных элементах, подобно тому, как заклеить ледяную дробилку на ваш автомобиль:
 class Car { public function crushIce($ice) { // WTF!? } } 
Дополнительные ресурсы: