在php中从另一个类调用方法
我正在阅读以下文档: 这是指南中建议的示例模型在php中从另一个类调用方法,php,oop,yii2,Php,Oop,Yii2,我正在阅读以下文档: 这是指南中建议的示例模型 namespace app\models; use yii\base\Model; use yii\web\UploadedFile; class UploadForm extends Model { /** * @var UploadedFile */ public $imageFile; public function rules() { return [
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();
或者像这样非静态地:
UploadedFile::saveAs(..., ...);
$this->saveAs();
但在后一种情况下,调用该方法的类不能从该方法所属的类扩展吗
saveAs()函数属于yii\web\Uploadedfile类。我们怎样才能用上面提到的方式来称呼它(
$this->imageFile->saveAs()
)?考虑以下PHP中基本OOP概念的示例
如果使用XAMPP
One.php
<?php
// One.php
/**
*
*/
class One
{
public $one_p;
// function __construct(argument)
// {
// # code...
// }
public function test_two()
{
var_dump($this->one_p);
}
}
<?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();
就像下面一样
$one_obj->one_p = new Someclass; // here Someclass should be 'require' at the begining of file
因此,您可以在这里访问Someclass
like的所有属性和方法
$one_obj->one_p->somemethod()代码>
由于getInstance()
是UploadFile
的静态方法,您可以在不创建对象的情况下调用它
并且getInstance()
返回一个对象
您可以将需要存储的任何内容存储在one\p
中,如int、float、array、resource、object。。。
希望你收到了
Yii是一个非常优秀的PHP框架,完全以OOP风格编码,而不是过程式编码,采用MVC架构。您将更喜欢它,只需浏览一下PHP中的以下基本OOP概念示例
如果使用XAMPP
One.php
<?php
// One.php
/**
*
*/
class One
{
public $one_p;
// function __construct(argument)
// {
// # code...
// }
public function test_two()
{
var_dump($this->one_p);
}
}
<?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();
就像下面一样
$one_obj->one_p = new Someclass; // here Someclass should be 'require' at the begining of file
因此,您可以在这里访问Someclass
like的所有属性和方法
$one_obj->one_p->somemethod()代码>
由于getInstance()
是UploadFile
的静态方法,您可以在不创建对象的情况下调用它
并且getInstance()
返回一个对象
您可以将需要存储的任何内容存储在one\p
中,如int、float、array、resource、object。。。
希望你收到了
Yii是一个非常优秀的PHP框架,完全以OOP风格编码,而不是过程式编码,采用MVC架构。您会更喜欢它,只需执行rules()命令系统将上载对象存储在$this->imageFile
中即可。一旦上传被内部处理,你只需要在其中有一个对象,并可以调用它的方法。我们如何从该模型类“$this->saveAs()”中的另一个类(yii\web\UploadedFile)调用方法?尤其是当此文件不是从yii\web\UploadedFile扩展时!没有$this->saveAs()
。有$this->imageFile->saveAs()
,因为在处理规则时,上载的文件对象被放入了$this->imageFile
中。您能在回答中详细说明一下吗?我已经阅读了yii\base\Model中的rules()和vaildate()方法,但不理解uploadedfile对象是如何放置在imageFile属性中的。这是您要查找的行:$Model->imageFile=uploadedfile::getInstance($Model,'imageFile')
在控制器()中调用$Model->upload()
之前$this->imageFile
将保存一个带有saveAs()
方法的实例。rules()基本上告诉系统将上载对象存储在$this->imageFile
中。一旦上传被内部处理,你只需要在其中有一个对象,并可以调用它的方法。我们如何从该模型类“$this->saveAs()”中的另一个类(yii\web\UploadedFile)调用方法?尤其是当此文件不是从yii\web\UploadedFile扩展时!没有$this->saveAs()
。有$this->imageFile->saveAs()
,因为在处理规则时,上载的文件对象被放入了$this->imageFile
中。您能在回答中详细说明一下吗?我已经阅读了yii\base\Model中的rules()和vaildate()方法,但不理解uploadedfile对象是如何放置在imageFile属性中的。这是您要查找的行:$Model->imageFile=uploadedfile::getInstance($Model,'imageFile')
在控制器()中调用$Model->upload()
之前$this->imageFile
将保存一个带有saveAs()
方法的实例。回答得很好!我将根据你的话问一个新问题,“因为getInstance()是上传文件的静态方法,你可以调用它而不创建对象。”我将在这篇评论中发布链接,所以请抽出一些时间来回答。回答得好!我将根据您的行问一个新问题,“因为getInstance()是UploadFile的静态方法,您可以调用它,而无需创建对象。”我将在这篇评论中发布链接,请您抽出一些时间回答。