Php 二年级IT专业学生-与OOP概念抗争
背景 正如标题中提到的,我是一名IT专业的二年级学生,我们刚刚开始学习PHP编程模块 我过去曾多次使用PHP&我熟悉使用函数等的基础知识,但对我来说,习惯OOP是一个全新的游戏。 我真的很难理解OOP的基本原理,我的意思是我明白了我理解这个概念…我只需要那个灯泡就行了,这就是我希望有人能帮助我的原因 问题 我的代码 我有点不好意思把我想到的代码贴到下面的问题上,我做了很多调整,在我指定的书中读了很多次OOP页面,但是我不断地出错,所以我想我别无选择Php 二年级IT专业学生-与OOP概念抗争,php,oop,Php,Oop,背景 正如标题中提到的,我是一名IT专业的二年级学生,我们刚刚开始学习PHP编程模块 我过去曾多次使用PHP&我熟悉使用函数等的基础知识,但对我来说,习惯OOP是一个全新的游戏。 我真的很难理解OOP的基本原理,我的意思是我明白了我理解这个概念…我只需要那个灯泡就行了,这就是我希望有人能帮助我的原因 问题 我的代码 我有点不好意思把我想到的代码贴到下面的问题上,我做了很多调整,在我指定的书中读了很多次OOP页面,但是我不断地出错,所以我想我别无选择 class Movie{ publi
class Movie{
public $title;
public $director;
public $cost;
public $actor;
function __construct($title, $director, $cost){
$title = $this->title;
$director = $this->director;
$cost = $this->cost;
}
function getTitle(){
return $this->title;
}
function setTitle($newTitle){
$this->title=$newTitle;
}
function setDirector($newDirector){
$this->director=$newDirector;
}
function getDirector(){
return $this->director;
}
function setCost($newCost){
$this->cost=$newCost;
}
function getCost(){
return $this->cost;
}
function setActor($newActor){
$this->actor=$newActor;
}
function getActor(){
return $this->actor;
}
}
$movieInfo = new Movie();
$name = $movieInfo->setTitle("Long Walk To Freedom");
$director = $movieInfo->setDirector("Spielberg");
$cost = $movieInfo->setCost("$35Mil");
echo $name;
echo $director;
echo $cost;
错误
第50行的Movie::_construct()缺少参数1,在第18行中定义
所以它适用于每一个属性,就像我说的,我尝试了许多调整,所有这些都会导致不同的错误
我的问题
感谢您阅读第18行中的,您有一个构造函数
function __construct($title, $director, $cost){
$title = $this->title;
$director = $this->director;
$cost = $this->cost;
}
这意味着您的类/对象需要一个参数$title、$director、$cost
才能创建新的对象MovieInfo
你需要提供一个论点
比如说
$movieInfo = new Movie('The Long Walk to Freedom','Justin Chadwick','$35');
在第18行中,您有一个构造函数
function __construct($title, $director, $cost){
$title = $this->title;
$director = $this->director;
$cost = $this->cost;
}
这意味着您的类/对象需要一个参数$title、$director、$cost
才能创建新的对象MovieInfo
你需要提供一个论点
比如说
$movieInfo = new Movie('The Long Walk to Freedom','Justin Chadwick','$35');
Movie
的构造函数需要三个参数$title
、$director
和$cost
。使用关键字new
创建类实例时,将调用类构造函数,如果未定义构造函数,则隐式调用默认的空构造函数。在本例中,您自己定义了一个构造函数,因此必须使用它
$movieInfo = new Movie();
这里您试图使用一个不存在的空构造函数,因为您已经定义了自己的构造函数。相反,您需要按照$title
、$director
和$cost
的顺序在expects中传递参数
$movieInfo = new Movie('Batman','Director Name', '5999');
此外,构造函数中的操作顺序不正确。您正在尝试使用实例变量分配构造函数的参数。这是倒退的,这是新的OO程序员经常犯的错误。请记住,您希望使用传递给构造函数的参数构造对象实例(及其字段)
function __construct($title, $director, $cost){
$this->title = $title;
$this->director = $director;
$this->cost = $cost;
}
我也注意到了这一点:
$name = $movieInfo->setTitle("Long Walk To Freedom");
$director = $movieInfo->setDirector("Spielberg");
$cost = $movieInfo->setCost("$35Mil");
“setters”(set方法)也称为“mutators”,也就是说,它们改变对象的状态,但不返回值。在这里,您试图设置标题、主管和成本,但当这些方法不返回任何内容时,尝试使用这些方法不存在的返回值
当您想要获取对象状态时,可以使用“accessor”方法(“getter”/get方法)。这些函数返回对象状态
$movieInfo->setTitle("Long Walk To Freedom");
$name = $movieInfo->getTitle();
//...etc
Movie
的构造函数需要三个参数$title
、$director
和$cost
。使用关键字new
创建类实例时,将调用类构造函数,如果未定义构造函数,则隐式调用默认的空构造函数。在本例中,您自己定义了一个构造函数,因此必须使用它
$movieInfo = new Movie();
这里您试图使用一个不存在的空构造函数,因为您已经定义了自己的构造函数。相反,您需要按照$title
、$director
和$cost
的顺序在expects中传递参数
$movieInfo = new Movie('Batman','Director Name', '5999');
此外,构造函数中的操作顺序不正确。您正在尝试使用实例变量分配构造函数的参数。这是倒退的,这是新的OO程序员经常犯的错误。请记住,您希望使用传递给构造函数的参数构造对象实例(及其字段)
function __construct($title, $director, $cost){
$this->title = $title;
$this->director = $director;
$this->cost = $cost;
}
我也注意到了这一点:
$name = $movieInfo->setTitle("Long Walk To Freedom");
$director = $movieInfo->setDirector("Spielberg");
$cost = $movieInfo->setCost("$35Mil");
“setters”(set方法)也称为“mutators”,也就是说,它们改变对象的状态,但不返回值。在这里,您试图设置标题、主管和成本,但当这些方法不返回任何内容时,尝试使用这些方法不存在的返回值
当您想要获取对象状态时,可以使用“accessor”方法(“getter”/get方法)。这些函数返回对象状态
$movieInfo->setTitle("Long Walk To Freedom");
$name = $movieInfo->getTitle();
//...etc
首先,构造函数看起来不正确,您应该将值赋给
this
like(您的方法不对)
此外,实例化对象时还需要传入值,如:
$movieInfo = new Movie('title', 'director', '$30');
还有一点奇怪的是,当你可以为其他属性传递一个actor时,你却不能将它传递到构造函数中。首先,构造函数看起来不正确,你应该给这个
赋值(你的方法不对)
此外,实例化对象时还需要传入值,如:
$movieInfo = new Movie('title', 'director', '$30');
还有一点奇怪的是,当你可以为其他属性传递一个actor时,却不能将它传递到构造函数中。我确切地知道你是从哪里来的。OOP绝对是其中一个概念,你只需尝试,直到你达到“Eureka!”
让我们先介绍一下你的构造函数。构造函数方法告诉对象在创建新的Movie实例时要做什么。您在第18行声明了一个构造函数方法,并告诉它使用$title
<