我知道这是基本的php问题,但是我有一些我不了解的问题,它与调用函数时的type Pair<a, b> = { First: a, Second: b }
有关,下面的代码只是一个例子。
案例:在return;
中,当我执行检查然后返回时,TEST2
会执行此工作并停止执行下一个代码return;
现在在TEST3
中,我调用一个函数TEST1
,此函数先检查然后重定向。问题是它返回shure,但是下一个代码也将执行_checkThat()
和TEST2
为什么?为什么当我将该函数的内容直接放在TEST3
中时,它会返回并停止执行下一个代码?
TEST1
其他问题,在这种情况下我可以使用<?php class Some_Class_IndexController extends Some_Other_Controller_Front_Action
{
$name = $this->getRequest()->getParam('name'); //Output: "john"
$email = $this->getRequest()->getParam('email'); //Output: "john@gmail.com"
$phone = $this->getRequest()->getParam('phone'); //Output: 09000000
//TEST1
if(isset($name)) {
$this->_checkThat($name);
}
//TEST2
if(isset($email)) {
if($email === "john@gmail.com") {
//some code to redirect to another page
return;
} else {
//some code to redirect to another page
return;
}
}
//TEST3
if(isset($name)) {
$this->_checkthat();
}
private function _checkThat($name) {
if ($name !== "john") {
//some code to redirect to another page
return;
}
}
}
吗?
continue;
答案 0 :(得分:1)
尽管注释中已经提到您的示例代码不正确,但您的问题在这里:
if(isset($name)) {
$this->_checkThat($name);
}
是您不执行任何操作,其中包含_checkThat()
返回的结果。显然,您应该 return
:
if(isset($name)) {
return $this->_checkThat($name);
}
作为旁注,我应该提到用_
命名方法以将它们标记为protected
/ private
的做法自php5起已经过时。
答案 1 :(得分:0)
这是一个简单的指南。
继承–以OOP方式重复使用代码
继承是面向对象编程中的一项基本功能/构造,您可以在其中使用一个类作为另一类或许多其他类的基础/基础。
为什么?
这样做可以有效地重用基类中找到的代码。
说,您想创建一个新的employee class
,因为我们可以说employee
是'person'的类型/种类,它们将共享通用的属性和方法。
有道理吗?
在这种情况下,继承可以使您的代码更轻便,因为您在两个不同的类中重复使用了相同的代码。但是与old-school
PHP不同:
您只需输入一次密码。 实际被重用的代码可以在许多(无限)类中被重用 但这只是在概念上输入到一个地方,这有点 像PHP include()。
看看示例PHP代码:
// 'extends' is the keyword that enables inheritance
class employee extends person
{
function __construct($employee_name) {
$this->set_name($employee_name);
}
}
通过继承重用代码:
由于类employee
是基于类person
的,因此employee
自动具有“ person”的所有公共和受保护的属性和方法。
书呆子注意:书呆子会说employee
是一种人。
代码:
class employee extends person
{
function __construct($employee_name){
$this->set_name($employee_name);
}
}
请注意,即使我们没有在employee
类中声明该方法,也可以在employee
中使用set_name()。那是因为我们已经在类person
中创建了set_name()。
书呆子注意:person
类被(书呆子)称为base
类或parent
类,因为它是employee
所基于的类。当您的项目变得更加复杂时,这种类层次结构可能会变得很重要。
通过继承重用代码:
如下面的代码片段所示,我们可以employee
的名义在person
对象上调用get_name。
代码:
<?phpinclude("class_lib.php"); ?>
<?php
// Using our PHP objects in our PHP pages.
$stefan = new person("Stefan Mischook");
echo "Stefan's full name: " . $stefan->get_name();
$james = new employee("Johnny Fingers");
echo "---> " . $james->get_name();
?>
这是一个经典的示例,说明了OOP如何减少代码行数(不必两次编写相同的方法),同时又保持代码模块化并更易于维护。
覆盖方法1
有时(使用继承时),您可能需要更改基类中方法的工作方式。
例如,让我们说'employee'类中的set_name()方法必须执行与person
类中不同的操作。
通过在override
中声明相同的方法,您person
类{_1}}的set_name()类。
代码段:
employee
请注意<?php
class person
{
protected function set_name($new_name) {
if ($new_name != "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
class employee extends person
{
protected function set_name($new_name) {
if ($new_name == "Stefan Sucks") {
$this->name = $new_name;
}
}
}
?>
类中的set_name()与父类employee
中发现的版本有何不同。
<< strong>替代方法:2
有时,您可能需要访问您在派生类(有时称为“子类”)中取代的方法的基类版本。
在我们的示例中,我们覆盖了person
类中的set_name()方法。我现在有
使用此代码:
employee
访问set_name()方法的父类(人)版本。
代码:
hperson::set_name($new_name);
注意:使用符号:
<?php
class person
{
// explicitly adding class properties are optional - but
// is good practice
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}
public function get_name() {
return $this->name;
}
// protected methods and properties restrict access to
// those elements.
protected function set_name($new_name) {
if ($this->name != "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
// 'extends' is the keyword that enables inheritance
class employee extends person
{
protected function set_name($new_name) {
if ($new_name == "Stefan Sucks") {
$this->name = $new_name;
}
else if ($new_name == "Johnny Fingers") {
person::set_name($new_name);
}
}
function __construct($employee_name)
{
$this->set_name($employee_name);
}
}
?>
…允许您专门指定要PHP搜索方法的类:
::
…告诉PHP在person::set_name()
类中搜索set_name()。
如果您只想引用当前班级的父级,也可以使用person
关键字。
代码:
parent