使用include从不同的类,命名空间和文件中调用php函数

时间:2017-07-07 14:05:00

标签: php function namespaces

我知道这个问题非常相似,如果不是和其他一些问题完全一样,但我似乎有问题甚至在遵循这些建议之后调用该函数。谢谢你的理解。

我尝试使用" setUserName"设置用户名此文件中的函数从另一个文件调用该函数,如下所示。我似乎很想知道如何调用类和命名空间。     

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for webExport StructType
 * @subpackage Structs
 */
class WebExport extends AbstractStructBase
{
    /**
     * The userName
     * Meta informations extracted from the WSDL
     * - nillable: true
     * @var string
     */
    public $userName;
    /**
     * The passwordMd5
     * Meta informations extracted from the WSDL
     * - nillable: true
     * @var string
     */
    public $passwordMd5;
    /**
     * The ecfFile
     * Meta informations extracted from the WSDL
     * - nillable: true
     * @var string
     */
    public $ecfFile;
    /**
     * Constructor method for webExport
     * @uses WebExport::setUserName()
     * @uses WebExport::setPasswordMd5()
     * @uses WebExport::setEcfFile()
     * @param string $userName
     * @param string $passwordMd5
     * @param string $ecfFile
     */
    public function __construct($userName = null, $passwordMd5 = null, $ecfFile = null)
    {
        $this
            ->setUserName($userName)
            ->setPasswordMd5($passwordMd5)
            ->setEcfFile($ecfFile);
    }
    /**
     * Get userName value
     * @return string|null
     */
    public function getUserName()
    {
        return $this->userName;
    }
    /**
     * Set userName value
     * @param string $userName
     * @return \StructType\WebExport
     */
    public function setUserName($userName = null)
    {
        // validation for constraint: string
        if (!is_null($userName) && !is_string($userName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($userName)), __LINE__);
        }
        $this->userName = $userName;
        return $this;
    }
    /**
     * Get passwordMd5 value
     * @return string|null
     */
    public function getPasswordMd5()
    {
        return $this->passwordMd5;
    }
    /**
     * Set passwordMd5 value
     * @param string $passwordMd5
     * @return \StructType\WebExport
     */
    public function setPasswordMd5($passwordMd5 = null)
    {
        // validation for constraint: string
        if (!is_null($passwordMd5) && !is_string($passwordMd5)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($passwordMd5)), __LINE__);
        }
        $this->passwordMd5 = $passwordMd5;
        return $this;
    }
    /**
     * Get ecfFile value
     * @return string|null
     */
    public function getEcfFile()
    {
        return $this->ecfFile;
    }
    /**
     * Set ecfFile value
     * @param string $ecfFile
     * @return \StructType\WebExport
     */
    public function setEcfFile($ecfFile = null)
    {
        // validation for constraint: string
        if (!is_null($ecfFile) && !is_string($ecfFile)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($ecfFile)), __LINE__);
        }
        $this->ecfFile = $ecfFile;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \StructType\WebExport
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}

下载我试图设置用户名如何从另一个文件中调用该函数。

<?php

require_once __DIR__ . '/vendor/autoload.php';

    class Class2{
        use \StructType\webExport;
        public static function staticFunction(){
            setUserName("webservice");
        }
    }

我哪里错了?如果我直接在consctruct中设置密码,一切都按预期工作:

 public function __construct($userName = "ws", $passwordMd5 = "qwerty", $ecfFile = null)

上一条错误讯息:

致命错误:Class2无法使用StructType \ WebExport - 它不是第289行index.php中的特征

2 个答案:

答案 0 :(得分:0)

您使用use内部类,表示使用Traits,如果您要创建WebExport对象,则可以使用关键字new来创建对象WebExport的例子,例如:

public static function staticFunction() {
    $webExport = new \StructType\WebExport();
    $webExport->setUserName('webservice');
    $webExport->setPasswordMd5('somemd5password');
    $webExport->setEcfFile(somefile)'
}

特质:http://php.net/manual/en/language.oop5.traits.php

答案 1 :(得分:0)

所以,这里有几件事...... 如果您有一个use语句 一个类的定义,那么它将会期待Trait。那个use语句确实需要在类的定义之外,因为你在这里使用的是Class而不是Trait。此外,当您想要使用课程时,案例很重要(可能只是OP问题中的类型o)。 WebExport不是webExport。最后,如果要设置类的实例变量,则需要具有该类的实例才能设置其中一个成员/实例变量。我不确定您的Class2是否打算扩展WebExport类,或者您是否想要使用合成并在新Class2的WebExport 属性上设置userName。 (我不确定你打算如何构建你的课程),但我希望有几种可能的用途......

require_once __DIR__ . '/vendor/autoload.php';
use \StructType\WebExport;

class Class2 {

   protected $webExportMemberVariable;

   public function __construct() {
       $this->webExportMemberVariable = new WebExport();
   }

   public function noLongerStaticFunction() {
      $this->webExportMemberVariable->setUserName("webservice");
   }
}

^在上面注意到WebExport有资本&#39; W&#39;在use语句中,我在setUserName类型的实例上调用WebExport。静态地做这个似乎有点奇怪但仍然可能......

require_once __DIR__ . '/vendor/autoload.php';
use \StructType\WebExport;

class Class2 {

   protected static $webExportStaticVariable = new WebExport();

   public static function staticFunction() {
      self::$webExportMemberVariable->setUserName("webservice");
   }
}

^从静态方法这样做是一个有点不可靠的恕我直言。在任何情况下,你必须有一个\StructType\WebExport类型的实例来设置一个成员变量,就好像你想在这里做的那样。