- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有这个 API,它要求我发送一个特定的数组键。由于该数组需要在所有类方法上使用,因此我正在考虑将其作为类属性。
abstract class something {
protected $_conexion;
protected $_myArray = array();
}
稍后,在这个类的方法上,我将使用:
$this->_myArray["action"] = "somestring";
(其中“action”是需要发送到此 API 的 key );
这样可以吗?我眼前的 OOP 还不够多,这就是我问这个问题的原因。
根据要求,这里是关于 API 的更多信息:
class Apiconnect {
const URL = 'https://someurl.com/api.php';
const USERNAME = 'user';
const PASSWORD = 'pass';
/**
*
* @param <array> $postFields
* @return SimpleXMLElement
* @desc this connects but also sends and retrieves the information returned in XML
*/
public function Apiconnect($postFields)
{
$postFields["username"] = self::USERNAME;
$postFields["password"] = md5(self::PASSWORD);
$postFields["responsetype"] = 'xml';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
$data = curl_exec($ch);
curl_close($ch);
$data = utf8_encode($data);
$xml = new SimpleXMLElement($data);
if($xml->result == "success")
{
return $xml;
}
else
{
return $xml->message;
}
}
}
abstract class ApiSomething
{
protected $_connection;
protected $_postFields = array();
/**
* @desc - Composition.
*/
public function __construct()
{
require_once("apiconnect.php");
$this->_connection = new Apiconnect($this->_postFields);
}
public function getPaymentMethods()
{
//this is the necessary field that needs to be send. Containing the action that the API should perform.
$this->_postFields["action"] = "dosomething";
//not sure what to code here;
if($apiReply->result == "success")
{
//works the returned XML
foreach ($apiReply->paymentmethods->paymentmethod as $method)
{
$method['module'][] = $method->module;
$method['nome'][] = $method->displayname;
}
return $method;
}
}
}
非常感谢,内存
最佳答案
首先,介绍一下背景。对象由“状态”(字段——在 PHP 中,这些通常称为“属性”,但我将以另一种方式使用该术语)和“行为”(方法)组成。状态是重要的组成部分encapsulation :只要对象存在,它就允许数据持久存在,并让数据在多个函数中可见。当您需要数据具有这两个属性时,您可以使用对象字段。这些属性是两个非常重要的属性的示例:可访问性(类似于 variable scope )和存储持续时间。讨论通常涵盖变量的范围和持续时间(将名称与数据相关联),但在这里我们将重点关注数据。
可访问性决定了何时何地可以通过代码访问数据。其他类型的可访问性包括本地(其中数据只能在单个函数内访问)和全局(其中每个函数调用中代码单元中的所有代码都可以访问数据)。与全局数据一样,state 可以被多个函数访问,但与全局数据不同的是,同一个方法在不同的对象上调用时会访问不同的数据。在某种程度上混淆了变量和数据的虚构语言示例:
i=0
inc() {...}
dec() {...}
class C {
i=0
inc() {...}
dec() {...}
}
a = C()
b = C()
inc() // the global i is visible in both these calls,
dec() // which access the same data
a.inc() // C::i is visible in both C::inc and C::dec,
b.dec() // but these calls access different data
i // The global i is accessible here
// C::i not accessible
存储持续时间决定了数据存在的时间(创建和销毁数据的时间)。持续时间类型包括 automatic (数据存在的地方,直到创建它的函数退出),static (数据在进程的生命周期内存在)和 dynamic (数据是显式创建的,并且在不再可访问时被垃圾收集器显式销毁或销毁)。状态与其对象共享持续时间:如果对象是自动的,则状态是自动的;如果是动态的,则状态是动态的。
State 并不是在方法调用之间访问数据的唯一方式。您还可以将数据作为参数传递给方法,在这种情况下,数据具有本地持续时间。 to 之间的区别在于,对于状态,“between”包括没有调用任何方法的时间(即在 call stack 上),而后者则没有。是否使用状态或参数取决于所需的持续时间类型。对于公共(public)方法,参数太多会降低可读性并可能导致错误(使用高 arity 的函数,更容易弄错顺序,或者完全忘记一个参数)。作为次要考虑因素,状态有助于减少参数数量。
从您目前所展示的内容来看,您所询问的数据不需要在方法之间可访问,也不需要存在于每个方法调用之外。您询问的帖子字段基本上是 remote procedure call 的参数(远程过程调用);如果您允许通过调用方法来构建这些参数,那么将数据存储为对象状态是有意义的。事实上,将帖子字段存储为状态是有效的,但不是最佳实践。这也不一定是最糟糕的做法。最好的情况是,当数据不在使用 API 的方法中时,您会将对象弄得一团糟并浪费内存。最坏的情况是,您在一个方法中设置参数,然后在调用另一个方法时在 RPC 中传递这些参数。
abstract class ApiSomething {
public function eatSaltyPork() {
$this->_postFields["action"] = __FUNCTION__;
$this->_postFields['spices[]'] = 'salt';
$result = $this->_connection->Apiconnect($this->_postFields);
...
}
public function eachCheese() {
$this->_postFields["action"] = __FUNCTION__;
$result = $this->_connection->Apiconnect($this->_postFields);
...
}
}
$thing = new ApiSomething();
$thing->eatSaltyPork();
$thing->eatCheese(); // ends up eating salty cheese
这是您非常想避免的事情。这可以通过将帖子字段数组设置为空数组来轻松完成,但此时您最好使用局部变量而不是字段。
关于php - 数组作为类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3941859/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!