Q:

Using one class's properties in another OOP PHP

I have the following class 
namespace PG\Referrer\Single\Post;

class Referrer implements ReferrerInterface
{
    /**
     * @var $authorReferrer = null
     */
    protected $isAuthorReferrer = null;

    /**
     * @var $dateReferrer = null
     */
    protected $isDateReferrer = null;

    /**
     * @var $searchReferrer = null
     */
    protected $isSearchReferrer = null;

    /**
     * @var $taxReferrer = null
     */
    protected $isTaxReferrer = null;

    /**
     * @param array $values = null;
     */
     public function __construct(array $values = null)
    {
        if ($values)
        $this->setBulk($values);
    }

    /**
     * Bulk setter Let you set the variables via array or object
     */
    public function setBulk($values)
    {

        if (!is_array($values) && !$values instanceof \stdClass) {
            throw new \InvalidArgumentException(
                sprintf(
                    '%s needs either an array, or an instance of \\stdClass to be passed, instead saw %s',
                    __METHOD__,
                    is_object($values) ? get_class($values) : gettype($values)
                )
            );
        }

        foreach ($values as $name => $value) {//create setter from $name
            global $wp_query;

            if (array_key_exists($value, $wp_query->query_vars)) { //Check that user don't set a reserved query vars
                throw new \InvalidArgumentException(
                    sprintf(
                        '%s is a reserved query_vars and cannot be used. Please use a unique value',
                        $value
                    )
                );
            }

            $setter     = 'set' . $name;
            $condition  = isset($_GET[$value]);

            if ($setter !== 'setBulk' && method_exists($this, $setter)) {
                $this->{$setter}($condition);//set value (bool)
            }
        }
        return $this;
    }

    /**
     * @param bool $authorReferrer
     * @return $this
     */
    public function setAuthorReferrer($isAuthorReferrer)
    {
        $this->isAuthorReferrer = $isAuthorReferrer;
        return $this;
    }

    /**
     * @param bool $dateReferrer
     * @return $this
     */
    public function setDateReferrer($isDateReferrer)
    {
        $this->isDateReferrer = $isDateReferrer;
        return $this;
    }
    /**
     * @param bool $searchReferrer
     * @return $this
     */
    public function isSearchReferrer($isSearchReferrer)
    {
        $this->isSearchReferrer = $isSearchReferrer;
        return $this;
    }

    /**
     * @param bool $taxReferrer
     * @return $this
     */
    public function setTaxReferrer($isTaxReferrer)
    {
        $this->isTaxReferrer = $isTaxReferrer;
        return $this;
    }

}

with its interface
namespace PG\Referrer\Single\Post;

interface ReferrerInterface
{
    /**
     * @param array $values
     * @return $this
     */
    public function setBulk($values);
    /**
     * @param bool $authorReferrer
     * @return $this
     */
    public function setAuthorReferrer($isAuthorReferrer);
    /**
     * @param bool $dateReferrer
     * @return $this
     */
    public function setDateReferrer($isDateReferrer);
    /**
     * @param bool $searchReferrer
     * @return $this
     */
    public function isSearchReferrer($isSearchReferrer);
    /**
     * @param bool $taxReferrer
     * @return $this
     */
    public function setTaxReferrer($isTaxReferrer);

}

This class sets up 4 conditionals that I need to use in another class. The values that is used in this class is also set from the other class, so basically the user sets values in the other class (lets call it class b) that is then used by class Referrer and returns the 4 conditionals which is then used by class b.
The reason why I'm doing it this way is because there will be two other classes that will need to do the same, but will returns different info
What is the more correct way to achieve this?
EDIT
To clear this up
class Referrer
The properties $isAuthorReferrer, $isDateReferreretc will either have a value of null or a boolean value depending on what is set by the user. 
Example: 
$q = new Referrer(['authorReferrer' => 'aq']);

In the code above, $isAuthorReferrer is set via the setBulk() method in the class to true when the variable aq is available in the URL or false when not present. The three other properties will return null because they are not set in the example.
The above works as expected, but I need to do this in another class, lets again call it class b. The arguments will be set to class b, and in turn,  class b will set this arguments to class Referrer, class Referrer will use this arguments and return the proper values of its properties, and class b will use this results to do something else
Example:
$q = new b(['authorReferrer' => 'aq']);

Where class b could be something like this (it is this part that I'm not sure how to code)
class b implements bInterface
{
    protected $w;
    protected $other;

    public function __construct($args = [])
    {
        //Do something here
        // Do something here so that we can use $other in other classes or functions
    }

    public function a()
    {
        $w = new Referrer($args);
    }

    public function b()
    {
        // use $w properties here
       // return $other for usage in other classes and functions
    }
}

A:

The best way is to inject the referrer to your classes in order to do loose coupling between them and the referrer (this pattern use the benefit of your ReferrerInterface):
class b implements bInterface
{
    protected $referrer;

    public function __construct(ReferrerInterface $referrer, array $values = array())
    {
        $this->referrer = $referrer;
        $this->referrer->setBulk($values);
    }

    public function getReferrer()
    {
        return $this->referrer;
    }

    public function b()
    {
        // use $this->referrer properties here
    }
}

// Instantiation (use your dependency injection if you have one):
$referrer = new Referrer();
$b = new b($referrer, ['authorReferrer' => 'aq']);

I do not understand what is $other so I removed it but explain me if you want me to I add it again.
If you need to use the properties of the referrer in b, you should add some getters in your ReferrerInterface to allow that. I would use setAuthorReferrer($isAuthorReferrer) to set the value and isAuthorReferrer() to get it for instance.

