2015-04-04 7 views
1

Каждый пример, который я видел для определения переменной в классе, делает это за пределами любых методов, например:Определение переменных класса в методе?

class Testclass 
{ 
    public $testvar = "default value"; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); 

Как бы вы об определении переменной внутри метода, и делает это определение доступно к любому другому методу внутри этого класса?

Отметьте, что я хотел бы только определить переменную в одной функции, не иметь другого определения для каждой функции.

ответ

2

Я думаю, вы должны прочитать о хороших объектно-ориентированных методов. Я имею в виду, почему вы хотите сделать переменную доступной «внутри метода»?

Переменные, созданные в рамках методов, являются локальными для этого конкретного метода и как таковые, область действия ограничена этим.

Вместо того, чтобы пытаться получить доступ к переменной между методами, вы должны использовать элемент/переменную экземпляра, доступную для объекта. Или, возможно, вы можете передать переменную ref между методами. Конечно, если это значение, которое никогда не изменяется, оно должно быть статической переменной класса (члена класса).

Я предлагаю прочитать учебник OO по tutsplus. Tutsplus, как правило, отличное качество. http://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762

В качестве альтернативы, вы можете сделать курс OO python (введение в информатику) на Udacity - его также очень высокое качество. Не беспокойтесь, что его Python, специфический язык и синтаксис не имеют значения при попытке понять основные концепции OO. https://www.udacity.com/course/cs101

Кроме того, это общая тема так есть поиск вокруг, т.е. Passing Variables between methods?

Я надеюсь, что помогает

Edit: обратиться комментарий. что-то вроде этого:

class Testclass 
{ 
    private $csvResult = []; // instance member array to store csv results 

    function dosomething() 
    { 
    $this->$csvResult = fgetcsv($blah); 
    } 

    function processResult() 
    { 
    foreach ($this->$csvResult as $item) { 
     var_dump($item) 
    } 
    } 
} 

Но опять же, как уже упоминалось Адриан Сид Альмагер, вы на самом деле лучше, чтобы построить прочный фундамент OO для себя вместо того, чтобы просто использовать этот пример, не по-настоящему понять его.

+0

Ну, у меня есть очень специфическая потребность, я пытаюсь проанализируйте значения из файла csv с помощью fgetcsv, и мне нужны значения, которые будут переданы другим методам, для чего им необходимо выполнить свою задачу. Насколько я знаю, вы не можете использовать какие-либо функции файловой системы вне аргумента функции. – Kreation

+1

проверить мое редактирование выше, вы обязательно должны использовать переменную экземпляра, чтобы удерживать результаты вашего csvparsing, он будет доступен «объект широкий». снова, если вы не понимаете понятия об объекте, инкапсуляции, переменной экземпляра, переменных класса, области видимости и т. д., а затем, как упоминает @Adrian Cid Almaguer, вы действительно должны прочитать OO. сделайте несколько уроков :) Goodluck mate – wired00

1

Настоящее имя класса переменных - «свойства». Вы также можете увидеть, как они ссылаются на другие термины, такие как «атрибуты» или «поля». В ООП (объектно-ориентированное программирование) Вы не можете определить свойство внутри метода (реальное имя функции класса - это метод, а не функция), потому что это атрибут класса, а не атрибут метода.

Свойства определяют атрибуты класса, а методы определяют поведение класса. Например, если у вас есть класс с именем Person, у человека есть имя и возраст, они являются вашими свойствами, они являются атрибутами, описывающими ваш класс, они не могут находиться внутри метода, описывающего поведение вашего класса, потому что свойства к вашему классу должен быть доступен любой метод, который должен его показать.

Вы можете прочитать некоторые примеры в:

http://www.killerphp.com/tutorials/object-oriented-php/

+0

Хорошо, хорошо, я немного смущен, что, например, я буду разбираться в csv-файле, используя fgetcsv, и определять полученные значения, а затем делиться ими с другими методами, чтобы они могли выполнять свою задачу. – Kreation

+0

@Kreation, вы хотите, чтобы вы делились результатами массива в результате fgetcsv? У вас просто будет этот массив как член класса. 'private $ csvResult = [];', то есть, который находится вне методов – wired00

+0

@Kreation Я думаю, что вам нужно прочитать некоторые документы об ООП и прочитать комментарий wired00 –

Смежные вопросы