我想在编码方面我是一个学习缓慢的人,我已经学习 PHP 几年了,但我仍然不了解类,所以现在是我努力至少了解它们的时候了好一点。
我对所有事情都使用函数。人们经常在这里对我发表评论,他们无法相信我有一个社交网站而且我不使用类(class)。
我真的不明白它们的好处,你能解释一下除了让多人轻松处理你的代码之外的好处吗?
对我来说,类似乎只会使简单的任务复杂化
最佳答案
简单(事实上,极其简单),类允许您以逻辑单元组织代码,并为用户创建的对象提供容器和模板。
假设您有一辆车...汽车 jar 有容量和里面的人。
class Car {
private $people = array();
private $capacity;
function __construct($capacity) { $this->capacity = $capacity; }
function addPerson($name) {
if(count($this->people) >= $this->capacity) {
throw new Exception("Car is already at capacity");
} else {
$this->people[] = $name;
}
}
function getPeople() { return $this->people; }
function getCapacity() { return $this->capacity; }
}
现在,我们可以开始使用这些汽车了:
$aliceCar = new Car(2);
$aliceCar->addPerson("Alice");
$bobCar = new Car(4);
$bobCar->addPerson("Bob");
$bobCar->addPerson("Jake");
我现在有 2 辆汽车(实例),它们拥有不同的数据。
echo implode(',', $aliceCar->getPeople()); // Alice
echo $aliceCar->getCapacity(); // 2
echo implode(',', $bobCar->getPeople()); // Bob,Jake
echo $bobCar->getCapacity(); // 4
我可能还想要一辆货车,它会有一个额外的门属性:
class Van extends Car {
private $num_doors;
function __construct($capacity, $num_doors) {
parent::__construct($capacity); // Call the parent constructor
$this->num_doors = $num_doors;
}
function getNumDoors() { return $this->num_doors; }
}
现在让我们使用那辆货车:
$jakeVan = new Van(7, 5);
// Van is ALSO a Car
$jakeVan->addPerson("Ron"); //Jake is with Bob now, so his son is driving the Van
$jakeVan->addPerson("Valery") //Ron's girlfriend
echo implode(',', $jakeVan->getPeople()); // Ron,Valery
echo $jakeVan->getCapacity(); // 7
echo $jakeVan->getNumDoors(); // 5
现在您可能会看到我们如何将这些概念应用于创建,例如 DBTable 和 User 类。
事实上,如果不深入了解面向对象编程的概念(抽象、封装、继承、多态),就很难真正开始解释为什么类可以简化人们的生活。
我建议您阅读以下书籍。它将帮助您掌握 OOP 的核心概念,并帮助您理解为什么对象真正让您的生活更轻松。如果不了解这些概念,很容易将类视为另一种复杂情况。
可在 Amazon.com 获得
关于php - 你能帮助我更好地理解 PHP 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197616/
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我以前没有使用过cron,所以我不能确定我这样做是对的。我想要自动化的任务似乎没有运行。我在终端中执行了这些步骤:sudogeminstall每当切换到应用程序目录无论何时。(这创建了文件schedule.rb)我将此代码添加到schedule.rb:every10.minutesdorunner"User.vote",environment=>"development"endevery:hourdorunner"Digest.rss",:environment=>"development"end我将此代码添加到deploy.rb:after"deploy:symlink","depl
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
您能为RubyonRails推荐好的数据网格类/gem吗?喜欢http://code.google.com/p/zend-framework-datagrid/采埃孚 最佳答案 你也可以试试datagridgem。这不仅关注带有列的网格,还关注过滤器。classSimpleReportincludeDatagridscopedoUser.includes(:group)endfilter(:category,:enum,:select=>["first","second"])filter(:disabled,:eboolean)fi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我正在构建Rails应用程序并使用RSpec制定测试。我为我正在创建的名为current_link_to的方法编写了测试。此方法应该检查当前页面是否对应于我传递给它的路径,并将current类添加到生成的链接中,以防它匹配。这是规范:require"spec_helper"describeApplicationHelperdodescribe"#current_link_to"dolet(:name){"Products"}let(:path){products_path}let(:rendered){current_link_to(name,path)}context"whenthe