[英]Calling method from another class in php
我正在阅读此文档:
http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html
这是指南中建议的示例模型,
namespace app\models;
use yii\base\Model;
use yii\web\UploadedFile;
class UploadForm extends Model
{
/**
* @var UploadedFile
*/
public $imageFile;
public function rules()
{
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
];
}
public function upload()
{
if ($this->validate()) {
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
return true;
} else {
return false;
}
}
}
我不明白的是在上面的upload()函数中如何调用saveAs()方法:
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
根据我所知道的任何一点PHP,方法都是静态调用的,如下所示:
UploadedFile::saveAs(..., ...);
或非静态的像这样:
$this->saveAs();
但是在后一种情况下,调用该方法的类是否一定要从该方法所属的类扩展呢?
saveAs()函数属于yii \\ web \\ Uploadedfile类。 我们如何用上述方式( $this->imageFile->saveAs()
)来称呼它?
考虑以下PHP中基本OOP概念的示例
如果使用XAMPP
,则在htdocs
这样的Web可访问目录中有2个文件
One.php
<?php
// One.php
/**
*
*/
class One
{
public $one_p;
// function __construct(argument)
// {
// # code...
// }
public function test_two()
{
var_dump($this->one_p);
}
}
Two.php
<?php
// Two.php
require 'One.php';
/**
*
*/
class Two
{
// function __construct(argument)
// {
// # code...
// }
public function test_one()
{
$one_obj = new One;
$one_obj->one_p = 'hello prop';
$one_obj->test_two();
}
}
$two_obj = new Two;
$two_obj->test_one();
现在在浏览器中运行Two.php并观察结果,它是string(10) "hello prop"
现在注释$one_obj->one_p = 'hello prop';
行并观察结果,为NULL
因此,我们可以得出结论,一旦设置了属性(变量),就可以全局访问它。 这是PHP OOP中的getters
和setters
的概念。 请在这里参考。 您不需要像在函数中那样在参数中传递它
以Yii为例
$one_obj->one_p = 'hello prop';
就像下面
$one_obj->one_p = new Someclass; // here Someclass should be 'require' at the begining of file
所以在这里您可以访问Someclass
所有属性和方法,例如$one_obj->one_p->somemethod();
由于getInstance()
是UploadFile
静态方法,因此您可以在不创建对象的情况下调用它。
并且getInstance()
返回一个对象您可以将需要存储的任何内容存储在one_p
例如int,float,数组,资源,对象……希望您能得到它。
Yii是一个非常好的PHP框架,完全以OOP风格编码,没有以程序风格编码,而是采用MVC架构。 您将享受更多,只需通过这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.