我对函数声明有疑问。我想要类似的东西:
password_hash('er', PASSWORD_ARGON2I);
https://www.php.net/manual/en/function.password-hash.php
创建函数时,我想声明一些可能性,例如:
然后,当用户使用该功能时,他只需设置常数的值即可。
实际上我是这样做的:
$instanceOfMyClass->myFunction('er', MyClass::A_CONSTANT);
它完成了工作,但是在使用常量名称之前,我不得不写类名称。然后,如果我愿意,我就可以访问该类的所有常量。
我认为,我在函数级别谈论诸如常量之类的东西。
非常感谢:-)
PS:有没有办法为函数属性做一个像int | object | string这样的DeclarationType?实际上,在这种情况下,我不键入提示,对于对象,我需要指定一个类或接口,有时,我接受许多对象来调用__toString()魔术类,然后接受所有对象。
答案 0 :(得分:1)
有很多方法可以做到。
已定义的常量不能修改,但是如果满足条件,可以对其进行分析和验证;尽管这个正在做所有的事情;因为对于不可变/不可变的东西将是双重工作
<?php
class Main{
const CONSTANT = 'value constant';
function ouputConts() {
echo var_dump(self::CONSTANT);
}
}
在您的情况下;我可以保持不变:
<?php
class Main{
const CONSTANT1 = 1; //integer
const CONSTANT2 = 0.1345; //float
const CONSTANT3 = 'text'; //string
const CONSTANT4 = array(1,2,3,4,5,10,20); //array
const CONSTANT5 = true; //bollean
function ouputConts() {
echo var_dump(self::CONSTANT1);
echo var_dump(self::CONSTANT2);
echo var_dump(self::CONSTANT3);
echo var_dump(self::CONSTANT4);
echo var_dump(self::CONSTANT5);
}
}
因为在php中一个对象或任何类型的对象都被认为是可变的;您不能声明类型对象的常量。
文档: https://php.net/manual/en/language.constants.syntax.php https://www.php.net/manual/en/language.oop5.constants.php
因此,您的另一个问题是,是否可以将常量作为函数的属性传递:
是的,但是您应该注意一些事项:
如果您位于同一类中,则不必在同一类的任何函数中使用该值,而无需为该类/范围将其传递给Global:
class Main{
const CONSTANT = 'value constant';
function function1() {
$this->function2();
}
function function2() {
$this->function3();
}
function function3() {
$this->function4();
}
function function4() {
echo var_dump(self::CONSTANT);
}
}
如果该函数属于另一个类,我建议您首先将其存储在变量中...:
class Main1{
const CONSTANT = 'value constant';
function function1() {
$foo = CONSTANT;
Main2::FunctionTest($foo);
}
}
class Main2{
function FunctionTest($foo = '') {
echo var_dump($foo);
}
}
// I can not verify it.
希望我对您的问题有所帮助;如果您需要更多帮助或加深查询,请给我评论。
更新;我看到了这个commnet:
@ChristophBurschka通过这样做,您在使用该功能时不会 帮助检索特定的常量(并非所有类常量 可用于此功能)。使用本机PHP函数时, 只是有可能使用可用的常量,而IDE具有 查找它们的能力(并在出现以下情况时自动将其列出给您) 您开始填写相应的参数)?感谢您的回答 关于类型提示:-)
如果问题出在您的const
的范围内:
您可以在应用程序中声明全局常量(在所有类和函数中):
<?php
if (!defined('DB_PASS')) {
define('DB_PASS', 'yourpassword');
}
它将在整个应用程序的任何类和功能中可用。并且它们的使用是不可变的,因此不用担心。
更新恢复和实施
使用我最后解释的方法,您可以进行比较并定义要使用的数据;常量的数据还是用户发送的数据;但所有这些都必须与您定义的特定功能中对用户数据的分析相关联。
最新更新
使用新定义,您可以:
<?php
//declaration:
if (!defined('PASS_SIS')) {
define('PASS_SIS', array(
'PASSWORD_DEFAULT' => 1,
'PASSWORD_BCRYPT' => 2,
'PASSWORD_ARGON2I' => 3,
'PASSWORD_ARGON2ID' => 4,
));
}
//call Function
$instanceOfMyClass->myFunction('er');
//function
function myFunction('er'){
echo var_dump(PASS_SIS);
//Access to data:
echo PASS_SIS['PASSWORD_DEFAULT'];
}
答案 1 :(得分:1)
我不太了解您的问题
常量类似于PASSWORD_DEFAULT,但仅此而已(没有带double的函数名:)。
但是我的猜测是,您正在寻找define()
。
我建议您尽可能地利用OOP,因此像其他人所说的那样,使用类常量。但是,如果出于任何原因想要全局常量,它都会像这样:
define('DIRECTION_FORWARD', 0);
define('DIRECTION_LEFT', 1);
define('DIRECTION_RIGHT', 2);
function goInDirection($direction = DIRECTION_FORWARD)
{
// ....
}
您可以使用位掩码,而不是仅使用序列号作为值,它可以与按位运算符和2的幂一起使用。
https://www.php.net/manual/en/language.operators.bitwise.php