Using dynamic objects in PHP (7.4), PhpStorm was throwing up warnings whenever a method was called on the resulting object. Hinting in a comment cured that (also, for methods that return objects, specifying the object type in a PHPDoc comment for the method).

Eliminates the PhpStorm warning: Method 'methodname' not found in ... Referenced method not found in subject class

	/**
	 * Inserts new data into database, returns object representing the newly inserted row. If table has a single primary key column and
	 * that column value is not defined in $data[], insert() will generate it using the method specified in newPrimaryKeyCallbackFunction
	 * If has_a is specified, an object of the appropriate type can be passed for that column
	 *
	 *
	 * @param String[] $data  Associative array; keys match up to the database table columns, values are initial settings for those fields.
	 *
	 * @see setPrimaryKeyCallback()
	 * @throws Exception If something interesting cannot happen
	 * @return ClassDBI (subclass, e.g., Author)
	 */
  	public static function insert( $insdata = null ) {
  		$ocname = get_called_class();

//  		$data = array();
//  		if(func_num_args() == 1 && $insdata !== null) {
//  			$data = $insdata; // Create new database row with passed data
//        } else {
//  			$data = $this->rowdata;	// Create new database row with data already populated
//        }

		$data = $insdata;

  		// print "insert() called from an instance of $ocname\n"; 	// debug
        /* @var $obj ClassDBI */		// Eliminates "method 'primaryKey not found in ... Referenced method not found in subject class." warning in PhpStorm
		$obj = new $ocname();
  		// print "object instantiated: " . print_r($obj);			// debug
		$pk = $obj->primaryKey();

Comments