2015-04-04 116 views
1

我已经看到了在一个类中定义一个变量每个实例,这样做以外的任何方法,例如:在方法中定义类变量?

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

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

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

你如何去定义一个变量的方法里面,使该定义可用到该类中的任何其他方法?

请注意,我只想在一个函数中定义变量,而不是为每个函数定义不同的定义。

回答

2

我想你应该在良好的面向对象的做法读了。我的意思是,你为什么想要“在一个方法内”提供一个变量?

在方法中创建的变量对于该特定方法而言是局部的,因此范围仅限于该方法。

如果您尝试访问方法之间的变量,则应改为使用可用对象范围的实例成员/变量。或者可能你可以通过方法之间的ref传递变量。当然,如果它的值永远不会改变,那么它应该是类(类成员)上的静态变量。

我建议阅读关于tutsplus的OO教程。 Tutsplus通常质量很高。 http://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762

或者,您可以在Udacity上进行面向对象的Python课程(介绍计算机科学) - 它的质量也非常高。在试图理解核心OO概念时,不要担心它的Python,特定语言和语法是无关紧要的。 https://www.udacity.com/course/cs101

此外,这是一个共同的主题,以便有一个搜索周围,即Passing Variables between methods?

我希望帮助

编辑:解决您的评论。是这样的:

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) 
    } 
    } 
} 

但同样,阿德里安熙ALMAGUER提到的,你真的是最好的为自己打造OO了坚实的基础,而不是仅仅使用这个例子没有真正了解它。

+0

嗯,我有一个非常具体的需求,我试图使用fgetcsv从csv文件解析值,并且我需要返回的值与其他方法共享,这需要他们执行任务。 据我所知,你不能在函数参数外使用任何文件系统函数。 – Kreation 2015-04-04 04:21:09

+1

检查我上面的编辑,你当然应该使用一个实例变量来保存你的csvparsing的结果,它将可用“对象宽”。再次如果你不明白对象范围,封装,实例变量,类变量,范围等等的概念,那么@Adrian Cid Almaguer提到,你应该阅读OO。做一些教程:) Goodluck队友 – wired00 2015-04-04 04:35:06

1

变量类的实际名称是“properties”。您也可以使用其他术语(如“属性”或“字段”)查看它们。在OOP(面向对象的编程)中,你不能在一个方法内定义一个属性(类函数的实际名称是method,而不是函数),因为这是一个类的属性,而不是方法的属性 。

属性定义了一个类的属性,而这些方法定义了一个类的行为。例如,如果您有一个名为Person的类,那么这个人具有Name和Age,它们是您的属性,它们是描述您的类的属性,它们不能位于描述您的类的行为的方法中,因为您的课程必须通过任何需要显示其行为的方法进行访问。

你可以阅读一些例子:

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

+0

好吧,好吧,我有点困惑,然后我会怎么做,例如,使用fgetcsv解析csv文件,并定义接收到的值,然后与其他方法共享它们,以便他们可以执行任务。 – Kreation 2015-04-04 04:18:32

+0

@创建,你的意思是你想分享从fgetcsv产生的数组结果?您只需将该数组作为类成员。 'private $ csvResult = [];',即位于方法之外 – wired00 2015-04-04 04:24:35

+0

@创建我认为你需要阅读一些关于OOP的文档,并阅读wired00评论 – 2015-04-04 04:28:05