Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类::为什么声明为新类?_Php_Function_Class_Variables_Object - Fatal编程技术网

PHP类::为什么声明为新类?

PHP类::为什么声明为新类?,php,function,class,variables,object,Php,Function,Class,Variables,Object,我对php类非常陌生,我想知道为什么我需要将其声明为变量并将其设置为新的 以下是一个例子: class myFirstClass { function Version(){ return 'Version 1'; } function Info(){ return 'This class is doing nothing'; } } $hola = new myFirstClass; echo $hola->Version

我对php类非常陌生,我想知道为什么我需要将其声明为变量并将其设置为新的

以下是一个例子:

class myFirstClass {
    function Version(){
        return 'Version 1';
    }
    function Info(){
        return 'This class is doing nothing';
    }
}

$hola = new myFirstClass;

echo $hola->Version();
如果不将其声明为变量并将其设置为NEW,为什么这将无法工作

换句话说。。。没有这一行:

$hola = new myFirstClass;

我太习惯函数了,所以看起来很奇怪…

要创建类的实例,必须使用new关键字。除非对象定义了一个在出错时抛出异常的构造函数,否则将始终创建该对象。类应该在实例化之前定义(在某些情况下这是一项要求)

如果包含类名称的字符串与new一起使用,则将创建该类的新实例。如果类位于命名空间中,则执行此操作时必须使用其完全限定名

基础

类和对象

这一行:

$hola=新的myFirstClass


正在说:创建一个名为
$hola
的新对象,然后将
myFirstClass
的新实例放入
$hola
中。现在,
$hola
实际上是一个对象,包含了一个新的
myFirstClass

的实例,这是面向对象编程(OOP)的基本原理。让我们以图书馆系统为例。如果你想知道一本书的名字,你不能只说“给我书名”,你必须知道是哪本书(通过身份证、作者等等)

在函数中,可以编写如下所示的函数:

function get_book($id){ // code }
在面向对象编程中,它实际上不是那样工作的。你有一本有名字的教科书。但这个名字只适用于那本书

class Book {
  var $name;
  public __construct($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}
为了调用
getName()
函数,我们需要一本书。这就是new所做的

$book = new Book("my title");
现在,如果我们在
$book
上使用
getName()
函数,我们将获得标题

$book->getName(); // returns "my title"

希望有帮助。

你说得对!无需使用
新的
运算符:

class myFirstClass {
    static function Version(){// static keyword
        return 'Version 1';
    }
    function Info(){
        return 'This class is doing nothing';
    }
}

echo myFirstClass::Version();// direct call

您必须创建一个实例。这就是为什么要使用
new
,因为OOP就是这样工作的。您需要为
myFirstClass
对象创建一个“新”实例。您必须在OOP中阅读更多内容,这就是它的工作原理!你可以把这个类想象成一个平面,然后用新的方法从这个平面创建一个精确的副本,然后构建一个对象!然后计划你不能使用,但如果你已经做了你的对象,你可以使用这个!我可以说,函数是一个计划,我将新的变量传递给该函数,并创建一个全新的结果,从零开始,我可以将其视为与使用类相同(或几乎相同)的结果。那么为什么函数不需要这种声明呢?哪种声明?你是说修饰符
public
private
等等吗?我知道了,但还是。。。我不明白为什么我需要将其传递给变量,而不能将其用作函数,例如:echo myFirstClass->Version();这是一种引用对象的方式,仅此而已!您可以调用$hola.someMethod();如果您正在访问一个静态方法,则使用来自它的方法。这完全取决于你想做什么。